elasticsearch 在句子中缀有前缀的更高级情况下的弹性搜索多个建议,elasticsearch,autocomplete,prefix,n-gram,elasticsearch-7,elasticsearch,Autocomplete,Prefix,N Gram,Elasticsearch 7" /> elasticsearch 在句子中缀有前缀的更高级情况下的弹性搜索多个建议,elasticsearch,autocomplete,prefix,n-gram,elasticsearch-7,elasticsearch,Autocomplete,Prefix,N Gram,Elasticsearch 7" />

elasticsearch 在句子中缀有前缀的更高级情况下的弹性搜索多个建议

elasticsearch 在句子中缀有前缀的更高级情况下的弹性搜索多个建议,elasticsearch,autocomplete,prefix,n-gram,elasticsearch-7,elasticsearch,Autocomplete,Prefix,N Gram,Elasticsearch 7,我的用例:当用户可以键入他的查询时,我有一个搜索栏。除了常规的查询建议之外,我还想向用户显示多种类型的搜索建议。例如,在下面的屏幕截图中,正如您在此屏幕截图中所看到的,您可以看到有公司部门、公司和学校的建议 这是目前使用和以下映射实现的(这是我们Ruby实现中的代码,但我相信您应该能够轻松理解它) { _来源:“”, 建议:{ text:query_来自_用户,#用户查询(如“sec”)以查找与“安全性”相关的匹配项 “学校名称”:{ 完成:{ 字段:“学校名称建议”, }, }, ‘公司’:

我的用例:当用户可以键入他的查询时,我有一个搜索栏。除了常规的查询建议之外,我还想向用户显示多种类型的搜索建议。例如,在下面的屏幕截图中,正如您在此屏幕截图中所看到的,您可以看到有公司部门、公司和学校的建议

这是目前使用和以下映射实现的(这是我们Ruby实现中的代码,但我相信您应该能够轻松理解它)

{
_来源:“”,
建议:{
text:query_来自_用户,#用户查询(如“sec”)以查找与“安全性”相关的匹配项
“学校名称”:{
完成:{
字段:“学校名称建议”,
},
},
‘公司’:{
完成:{
字段:“公司名称。建议”,
},
},
“部门”:{
完成:{
字段:基于当前语言(I18n.locale)的扇区字段,
#当用户用法语浏览时,使用“company_sector.french.suggest”
},
},
},
}
以下是我的映射(这是用Ruby编写的,但我相信将其转换为Elasticsearch JSON配置应该不会太难

索引:公司名称,键入:“text”do
索引:建议,键入:“完成”
结束
索引:公司/部门,类型:“对象”do
索引:法语,键入:“text”do
索引:建议,键入:“完成”
结束
索引:英语,键入:“text”do
索引:建议,键入:“完成”
结束
结束
索引:学校名称建议,键入:“完成”
#示例索引JSON
{ 
公司名称:“克里斯汀·迪奥时装”,
公司/部门:{
中文:“牛奶行业”,
法语:“莱蒂埃教派”
},
学校名称建议:['Télécom ParisTech','Ecole Centrale Paris']
}
问题是建议不够有力,无法根据句子的中间部分自动完成,甚至在完美匹配后也无法提供额外的结果

案例1 -句子中缀的前缀匹配 案例2-即使在完美匹配后也提供结果 我可以在Elasticsearch中使用建议器来实现这一点吗?或者我是否需要退回到多个
搜索
,在您使用前面提到的
查询
键入数据类型时利用新的
搜索

我正在AWS上使用elasticsearch 7.1和Ruby驱动程序(gem
elasticsearch-7.3.0

# documents
[{ company_name: "Christian Dior Couture" }]
# => A search term "Dior" should return this document because it matches by prefix on the second word
# documents
[
  { company_name: "Crédit Agricole" },
  { company_name: "Crédit Agricole Pyrénées Gascogne" },
]
# => A search term "Crédit Agricole" should return both documents (using the current implementation it only returns "Crédit Agricole"