MongoDB多种语​​言的文本索引

时间:2019-06-16 17:00:57

标签: mongodb collation full-text-indexing stemming

我在MongoDB中创建了一个文本索引。 索引包含翻译成多种语言的文本。 我希望用户能够搜索所有翻译。

我研究了文档,但由于以下问题而最终从索引中删除了语言信息: 如果我指定文字语言,则MongoDB会将特定于语言的规则应用于可搜索的文字(例如词干)。 如果我随后搜索特定文本,则MongoDB将对搜索文本应用相同的规则,如果语言不匹配,则找不到某些文本。

具体来说,我搜索了“humanité”或“ humanite”文本,并检查了查询计划说明。下面列出了不同的词干。

  • 'humanité'(语言:fr)>'human'
  • 'humanite'(语言:fr)>'humanit'
  • 'humanité'(语言:en)>'humanite'
  • 'humanite'(语言:en)>'humanit'
  • 'humanité'(语言:无)>'humanite'
  • 'humanite'(语言:无)>'humanite'

如您所见,法语中“humanité”的来源为“ human”,而英语(或无语言)的含义为“ humanite”。 如果用户忘记了这些尖锐字符而只输入了“人道主义”字样,那么对于法语和英语,它将被简化为“人道主义”字样,但是如果指定了language = 'none'则不会。

我想出的唯一替代解决方案是让用户选择他们要搜索的语言,或者使用提供其他功能的专用搜索数据库。

工作:

collection.createIndex(
  { field1: 'text', field2: 'text' },
  { background: true, name: '$text', default_language: 'none',
    language_override: '__non_existing_field' })

collection.aggregate([
  { $match: { $text: { $search: filter } } },
  { $addFields: { '_sort.score': { $meta: 'textScore' } } },
  { $sort: { '_sort.score': -1 } }])

不起作用:

collection.createIndex(
  { field1: 'text', field2: 'text' },
  { background: true, name: '$text', default_language: 'en', language_override: '_text_language' })

collection.aggregate([
  { $match: { $text: { $search: filter /* also not working with $language: 'en' or 'none' */ } } },
  { $addFields: { '_sort.score': { $meta: 'textScore' } } },
  { $sort: { '_sort.score': -1 } }])

0 个答案:

没有答案