我想使用弹性搜索实现自动提示功能。我可以使用nGram过滤器来匹配多个字段上的部分单词,并且其工作正常。搜索输出根据需要返回包含多个字段的完整文档。现在我的问题是,如何根据匹配字段向用户提供自动提示。例如我有5个领域:
{userId:'rakesh',firstName:'Rakesh','lastName':'Goyal','mobileNo':'123-123-1234','alternativeMobileNo':'123-123-1235'}
{userId:'goyal',firstName:'Goyal','lastName':'Rakshit','mobileNo':'123-123-1236','alternativeMobileNo':'123-123-1237'}
在上面的例子中,如果用户输入123,我想返回123-123-1234,123-123-1235,123-123-1236,123-123-1237(4个自动建议)。
同样,如果用户输入Rak,我想返回Rakesh,Rakshit(2个自动建议)。
如何知道第一个示例中mobileNo和alternativeMobileNo字段中是否存在匹配并相应地返回结果?
如何知道第二个示例的firstName和lastName字段中是否存在匹配并相应返回结果?
答案 0 :(得分:1)
如何根据匹配字段向用户提供自动提示?
当用户键入 123 时,将其存储在Java变量中,准备一个如下所示的查询,将该变量插入并向ElasticSearch发送请求。
{
"query" : {
"query_string" : {
"query" : "*123*"
}
}
}
以上查询将设法在mobileNo
和alternativeMobileNo
两个字段中进行检查。
同样,如果用户输入 Rak ,则查询将类似于上一个查询,
{
"query" : {
"query_string" : {
"query" : "*Rak*"
}
}
}
我认为您希望使用highlighter api来回答上一个如何问题,这样可以突出显示一个或多个字段的搜索结果。
es:
中突出显示示例的屏幕截图