Elasticsearch多个字段自动提示

时间:2013-11-03 12:44:10

标签: java elasticsearch

我想使用弹性搜索实现自动提示功能。我可以使用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字段中是否存在匹配并相应返回结果?

1 个答案:

答案 0 :(得分:1)

如何根据匹配字段向用户提供自动提示?

当用户键入 123 时,将其存储在Java变量中,准备一个如下所示的查询,将该变量插入并向ElasticSearch发送请求。

{
    "query" : { 
          "query_string" : {
              "query" : "*123*"
           } 
     }
}

以上查询将设法在mobileNoalternativeMobileNo两个字段中进行检查。

同样,如果用户输入 Rak ,则查询将类似于上一个查询,

{
    "query" : { 
          "query_string" : {
              "query" : "*Rak*"
           } 
     }
}

我认为您希望使用highlighter api来回答上一个如何问题,这样可以突出显示一个或多个字段的搜索结果。

es:

中突出显示示例的屏幕截图

ES Highlight api