sorting - 内部单个查询的弹性搜索排序结果应该 bool 查询
问题描述
我有一个 Elastic Search 服务器设置,其中存储了用于公司搜索的公司名称,它的工作方式是:
从公司名称中,空格和点将被删除并存储在 ES 中名为 trimmedcompanyname 的字段中,
{
"companyName" : "RECKON INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "reckoninfosystemprivatelimited",
"id" : "1079"
}
现在当搜索到我的服务器时,我删除了空格和点,然后向 ES 服务器发出请求。查询格式的ES请求为:
GET /_search
{
"from": 0,"size":1000,
"query": {
"bool": {
"should": [
{
"wildcard": {
"trimmedCompanyName.keyword": {
"value": "infosys*"
}
}
},
{
"wildcard": {
"trimmedCompanyName.keyword": {
"value": "*infosys*"
}
}
}
]
}
}
}
现在这给出了结果
[
{
"_source" : {
"companyName" : "INFOSYS LIMITED",
"trimmedCompanyName" : "infosyslimited"
}
,
{
"_source" : {
"companyName" : "INFOSYSTEM BPO LIMITED",
"trimmedCompanyName" : "infosysbpolimited"
}
},
{
"_source" : {
"companyName" : "INFOSYS ASIC SYSTEMS",
"trimmedCompanyName" : "infosysasicsystems"
}
},
{
"_source" : {
"companyName" : "SUMEDH INFOSYSTEMS PRIVATE LIMITED",
"trimmedCompanyName" : "sumedhinfosystemsprivatelimited"
}
},
{
"_source" : {
"companyName" : "ASSURE INFOSYSTEMS PRIVATE LIMITED",
"trimmedCompanyName" : "assureinfosystemsprivatelimited"
}
},
{
"_source" : {
"companyName" : "IMBIBE INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "imbibeinfosystemprivatelimited"
}
},
{
"_source" : {
"companyName" : "GOOFY INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "goofyinfosystemprivatelimited"
}
},
{
"_source" : {
"companyName" : "DHRUV INFOSYSTEMS PRIVATE LIMITED",
"trimmedCompanyName" : "dhruvinfosystemsprivatelimited"
}
}
]
但我希望结果为
[
{
"_source" : {
"companyName" : "INFOSYS ASIC SYSTEMS",
"trimmedCompanyName" : "infosysasicsystems"
}
},
{
"_source" : {
"companyName" : "INFOSYSTEM BPO LIMITED",
"trimmedCompanyName" : "infosysbpolimited"
}
},
{
"_source" : {
"companyName" : "INFOSYS LIMITED",
"trimmedCompanyName" : "infosyslimited"
}
,
{
"_source" : {
"companyName" : "ASSURE INFOSYSTEMS PRIVATE LIMITED",
"trimmedCompanyName" : "assureinfosystemsprivatelimited"
}
},
{
"_source" : {
"companyName" : "DHRUV INFOSYSTEMS PRIVATE LIMITED",
"trimmedCompanyName" : "dhruvinfosystemsprivatelimited"
}
},
{
"_source" : {
"companyName" : "GOOFY INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "goofyinfosystemprivatelimited"
}
},
{
"_source" : {
"companyName" : "IMBIBE INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "imbibeinfosystemprivatelimited"
}
},
{
"_source" : {
"companyName" : "SUMEDH INFOSYSTEMS PRIVATE LIMITED",
"trimmedCompanyName" : "sumedhinfosystemsprivatelimited"
}
}
]
即在结果中,单个通配符查询的 o/p 必须在它们之间进行排序,但第一个通配符查询的 o/p 应该在第二个通配符查询的 o/p 之前。有人可以帮我吗?
解决方案
我得到了解决方案,对搜索分数以及 trimmedcompanyname 进行排序。我的最终查询是:
GET /_search
{
"from": 0,"size":1000,
"query": {
"bool": {
"should": [
{
"wildcard": {
"trimmedCompanyName.keyword": {
"value": "infosys*"
}
}
},
{
"wildcard": {
"trimmedCompanyName.keyword": {
"value": "*infosys*"
}
}
}
]
}
},
"sort": [
{
"_score": {
"order": "desc"
}
},
{
"trimmedCompanyName.keyword": {"order": "asc"}
}
]
}
希望能帮助到你!
推荐阅读
- linux - Web 中的 Vala Image Base64
- r - -title 中的错误:一元运算符的无效参数执行停止
- python - 如何使用正则表达式删除重复字符 Python
- python - selenium - 想要从表的第二列中选择所有值
- python - python拆分为n个数组(批处理)并尝试在一批数学中对相同的ID进行分组
- c - 如何排除非数字键?CS50 凯撒 Pset2
- python - Django如何添加有条件的类媒体
- protractor - Chromedriver 已停止工作并显示 Driver info: chromedriver=81.0.4044.69 即使我安装了 81.0.4044.138
- php - 密码重置系统的安全链接哈希
- node.js - 如何更改节点 console.log 打印的宽度?