我有一个Elastic Search服务器设置,用于存储要用于公司搜索的公司名称,其工作方式是:
在公司名称中,空格和点将被删除并存储在ES的trimmedcompanyname字段中,
<name>ControllerService
现在,当搜索进入我的服务器时,我会删除空格和点,然后向ES服务器发出请求。查询格式的ES请求为:
{
"companyName" : "RECKON INFOSYSTEM PRIVATE LIMITED",
"trimmedCompanyName" : "reckoninfosystemprivatelimited",
"id" : "1079"
}
现在,结果为
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"
}
}
]
即结果,各个通配符查询的o / p必须在它们之间进行排序,但是第一个通配符查询的o / p应该在第二个通配符查询的o / p之前。有人可以帮我吗?
答案 0 :(得分:0)
我找到了解决方案,并根据搜索结果以及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"}
}
]
}
希望有帮助!