Elasti c поиск сортировки результатов отдельных запросов внутри должен bool запрос - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть Elasti c Настройка сервера поиска, где хранятся названия компаний, которые будут использоваться для поиска компании, как это работает:

Из названия компании пробелы и точки будут удалены и сохранены в 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 из второго запроса с подстановочными знаками. Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 01 марта 2020

Я получил решение, отсортировав по поисковому баллу, а также подрезал название компании. Мой последний запрос:

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"}
    }
  ]
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...