什么语言分析器在搜索时使用语言特定内容(弹性搜索)?

时间:2014-09-28 16:03:54

标签: elasticsearch

我们有一个应用程序,位于不同国家/地区(因此使用不同语言)的客户可以输入文本块。文本块在200到2.000个字符之间,因此现有的语言检测算法非常准确。因此,用荷兰语停止词和荷兰语词汇分析用荷兰语写的文本。法语文本,法语停止词和法语词干。这很完美。

我们没有每种语言的ES索引。因此,在同一索引中,有多种语言的混合,但每个文档都使用正确的分析器进行分析。

这是我的问题:如果我们现在想要搜索文档(使用典型的“谷歌风格”搜索栏),用户输入几个单词并根据这些单词在ES中搜索。我们应该在搜索时使用什么样的分析仪?如果用户只输入2或3个单词,语言检测不准确,因此使用这种不精确的分析仪分析文本不是我认为的解决方案...使用默认分析器进行分析也是一个问题,因为只有一个“单词分裂”,没有词干或其他语言特定的标记化。

您是否可以推荐最佳做法,从而获得准确的搜索结果?

希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:1)

我们刚刚解决了一个非常类似的问题。

如果我猜测一下,您可能会在索引时分析您的文档,方法是将文档中的_analyzer字段设置为elasticsearch中的相应语言分析器。

这种方法的问题在于,弹性搜索在查询时不会检查文档中定义的分析器。 Elasticsearch能够通过冒泡层次结构找到正确的查询分析器,直到找到定义的分析器:

首先,它会检查是否存在:

  • 查询本身定义的analyzer,否则
  • 字段映射中定义的search_analyzer,否则
  • 字段映射中定义的analyzer,否则
  • 该类型的default search_analyzer,默认为
  • 该类型的default分析器,默认为
  • 索引设置中名为default_search的分析器,默认为
  • 索引设置中名为default的分析器,默认为
  • 在节点级别命名为default_search的分析器,默认为
  • 在节点级别命名为default的分析器,默认为
  • standard分析器

您可以在此处看到从未检查为文档定义的分析器。如果您能够为每种语言指定一个索引,那么您将从以下事实中受益:

答案 1 :(得分:0)

如果您有可能拥有用户区域设置(例如浏览器的区域设置),您可以:

  • 按照tss。
  • 的建议使用语言索引
  • 一次在多个索引/语言上搜索该术语,但使用indices_boost参数提升其中一些。将使用用户区域设置来确定推荐候选项。

例如,您可以决定对德国用户也应该查询荷兰语,但对这些结果不太重视。在这种情况下,您的用户键入" Foutmelding"仍会有一些结果。

{
  "query":{
    ...
  },
  "indices_boost":{
    "index-ge": 5,
    "index-nl": 1
  }
}

缺点是你必须决定一个"语言环境映射"定义这些提升。