Искать несколько значений, но остановить поиск, когда найдено точное соответствие - PullRequest
0 голосов
/ 21 января 2020

Итак, я реализовал базовый c поиск с использованиемasticSearch. Как мне дать поисковый запрос такой, что:

if (получить точное совпадение AccountId: CMRZ)

{

  return me just that one account with id:CMRZ

}

else

   return me accounts that have ids like id:CMRZ12, id:98CMRZ12 etc.

Я попробовал следующее, но оно не работает, если у меня есть дефис в моем идентификаторе: http://localhost: 9200 / account / useraccounts / _search? Q = id : " * CMRZ * "

если я отправлю <-> результат будет

1-CMRZ-121 <-> 1-CMRZ-121

1-CMRZ- < -> 1-CMRZ-121, 1-CMRZ-165

НО

1-CMR <-> NULL RESPONSE

Таким образом, теперь я знаю, что проблема с дефис. Любой способ предотвратить это, чтобы я получил следующий ответ?

1-CMR <-> 1-CMRA-971,1-CMRZ-121, 1-CMRZ-165

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вы можете использовать для этого логическое условие «следует» с термином «запрос» для точного соответствия и добавить сначала повышение, чтобы получить его, а затем сопоставление для учетных записей, похожих на ваш идентификатор.

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-bool-query.html

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-term-query.html#

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-match-query.html

POST _search
{
  "query": {
    "bool" : {
      "should" : [
        {"term" : { "id" : "CMRZ", "boost": 3.0 }},
        {"match": {"id": {"query": "CMRZ"}}
      ]
}}} 
0 голосов
/ 21 января 2020

Вы можете использовать API множественного поиска (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html). Отправьте два запроса здесь - один с точным соответствием, а другой с совпадениями токенов. В своем коде вы можете решить, какой из них взять.

Если вы счастливы сделать это за два вызова, вы можете сделать их один за другим и делать только секунду, если требуется.

...