1

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

4

1 回答 1

1

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

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

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

上面的查询将设法在两个字段mobileNoalternativeMobileNo.

同样,如果用户键入Rak,查询将与上一个类似,

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

而且我认为您想使用highlighter api来回答您最后的问题,它允许突出显示一个或多个字段上的搜索结果。

es 中的高亮示例截图:

ES 高亮 api

于 2013-11-03T21:33:22.017 回答