Elasticsearch: поиск подходящего алгоритма поискового запроса.

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

Например: если я ищу ключевое слово "test" и у меня более 12 полей в одной записи index.

Теперь, если тест соответствует в 10 полях в 1 записи, тогда совпадет в 6 полях в других записях, а затем в 2 полях в других записях.

Я хочу показать первую запись в листинге с совпадением строки поиска с максимальным количеством совпадений полей с минимальным количеством совпадений полей.

В соответствии с этим примером первая запись показывает, что 10 полей совпадают со строкой поиска, вторая - с совпадением 6 полей, а третья - с совпадением 2 полей и продолжается ...

Хорошо, если удастся получить какое-нибудь хорошее предложение или пример того же.


person jilesh    schedule 06.05.2020    source источник


Ответы (1)


Это поведение по умолчанию elasticsearch. Документы с большим количеством совпадений оцениваются выше

Запрос:

{
  "query": {
    "query_string": {
      "default_field": "*", -->search in all fields
      "query": "test"
    }
  }
}

Результат:

{
        "_index" : "index18",
        "_type" : "_doc",
        "_id" : "iSCe6nEB8J88APx3YBGn",
        "_score" : 0.9808291,  --> scored higher as two fields match
        "_source" : {
          "field1" : "test",
          "field2" : "test"
        }
      },
      {
        "_index" : "index18",
        "_type" : "_doc",
        "_id" : "iiCe6nEB8J88APx3ghF-",
        "_score" : 0.4700036,
        "_source" : {
          "field1" : "test",
          "field2" : "abc"
        }
      }
person jaspreet chahal    schedule 06.05.2020
comment
Нет необходимости указывать default_field, если мы хотим искать во всех полях, поскольку * является значением по умолчанию. (если он не изменен в index.query.default_field) - person Kumar V; 06.05.2020
comment
что, если мы хотим искать в некоторых полях, а не во всех полях? добавить, чтобы поля были запятыми вместо *? - person jilesh; 07.05.2020
comment
@jilesh, да, вы можете передать значение default_field: [field1, field2] - person jaspreet chahal; 07.05.2020
comment
@jaspreetchahal, хорошо, если мы передадим его как упоминание в вашем комментарии, в этом случае он установит приоритет по умолчанию, я имею в виду сначала проверку из поля1, а затем для поля2? - person jilesh; 07.05.2020
comment
@jilesh это будут поля: [field1, field2] вместо default_field. Все поля проверены. Документы с большим количеством совпадений оцениваются выше - person jaspreet chahal; 07.05.2020
comment
@jaspreetchahal, Хорошо, звучит хорошо, и это хороший способ пойти по этому пути, я имею в виду, что хочу найти более 10 полей одной записи или любое другое оптимистичное решение, которое вы предлагаете? - person jilesh; 07.05.2020
comment
@jilesh это нормально, если вы ищите по всему индексу, вы можете не заполнять поля. Если подмножество полей, вам нужно будет их упомянуть - person jaspreet chahal; 07.05.2020
comment
@jaspreetchahal, он не работает с полями только в строке запроса, я думаю, мне нужно использовать multi_match для query_string. верный? - person jilesh; 07.05.2020
comment
Позвольте нам продолжить это обсуждение в чате. - person jaspreet chahal; 07.05.2020