我们有一个应用程序,位于不同国家/地区(因此使用不同语言)的客户可以输入文本块。文本块在200到2.000个字符之间,因此现有的语言检测算法非常准确。因此,用荷兰语停止词和荷兰语词汇分析用荷兰语写的文本。法语文本,法语停止词和法语词干。这很完美。
我们没有每种语言的ES索引。因此,在同一索引中,有多种语言的混合,但每个文档都使用正确的分析器进行分析。
这是我的问题:如果我们现在想要搜索文档(使用典型的“谷歌风格”搜索栏),用户输入几个单词并根据这些单词在ES中搜索。我们应该在搜索时使用什么样的分析仪?如果用户只输入2或3个单词,语言检测不准确,因此使用这种不精确的分析仪分析文本不是我认为的解决方案...使用默认分析器进行分析也是一个问题,因为只有一个“单词分裂”,没有词干或其他语言特定的标记化。
您是否可以推荐最佳做法,从而获得准确的搜索结果?
希望有人可以提供帮助。
答案 0 :(得分:1)
我们刚刚解决了一个非常类似的问题。
如果我猜测一下,您可能会在索引时分析您的文档,方法是将文档中的_analyzer
字段设置为elasticsearch中的相应语言分析器。
这种方法的问题在于,弹性搜索在查询时不会检查文档中定义的分析器。 Elasticsearch能够通过冒泡层次结构找到正确的查询分析器,直到找到定义的分析器:
首先,它会检查是否存在:
analyzer
,否则search_analyzer
,否则analyzer
,否则default
search_analyzer,默认为default
分析器,默认为default_search
的分析器,默认为default
的分析器,默认为default_search
的分析器,默认为default
的分析器,默认为standard
分析器您可以在此处看到从未检查为文档定义的分析器。如果您能够为每种语言指定一个索引,那么您将从以下事实中受益:
答案 1 :(得分:0)
如果您有可能拥有用户区域设置(例如浏览器的区域设置),您可以:
indices_boost
参数提升其中一些。将使用用户区域设置来确定推荐候选项。例如,您可以决定对德国用户也应该查询荷兰语,但对这些结果不太重视。在这种情况下,您的用户键入" Foutmelding"仍会有一些结果。
{
"query":{
...
},
"indices_boost":{
"index-ge": 5,
"index-nl": 1
}
}
缺点是你必须决定一个"语言环境映射"定义这些提升。