【发布时间】:2020-06-13 05:05:13
【问题描述】:
我有一个 Elastic Search 服务器设置,其中存储了用于公司搜索的公司名称,它的工作方式是:
从公司名称中,空格和点将被删除并存储在 ES 中名为 trimmedcompanyname 的字段中,
{
"companyName" : "RECKON INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "reckoninfosystemprivatelimited",
"id" : "1079"
}
现在当搜索到我的服务器时,我删除了空格和点,然后向 ES 服务器发出请求。查询格式的ES请求为:
GET /_search
{
"from": 0,"size": 100,
"query": {
"wildcard": {
"trimmedCompanyName.keyword": {
"value": "*infosys*"
}
}
}
}
但我有大约 600 家名称为 infosys 的公司,它们将在存储时删除空格。所以 ES 返回我 100 家公司,但在这 100 家公司中,infosys 出现在第二个单词的开头或第三个单词的开头,但我希望结果包括在第一个单词中包含 infosys 的公司,然后在第二个单词中包含等等。
我能想到的一个解决方案是使用通配符查询 infosys* 和第二个查询 *infosys* 触发两个 ES 请求,将两个结果结合起来,删除重复项并返回响应,但由于此请求必须与分页因此触发两个请求可能会出错,有人可以帮我解决这个问题
【问题讨论】:
-
我不能告诉你如何在结果中首先获得公司名称,它的第一个单词中有
infosys,但通过查看我可以告诉你应该使用trimmedCompanyName并删除@ 987654327@ 包含关键字,它不会是不区分大小写的搜索。
标签: sorting elasticsearch wildcard elasticsearch-query