Многословный запрос ElasticSearch, сопоставление нескольких слов более ценно, чем сопоставление нескольких, но много раз - PullRequest
0 голосов
/ 17 июня 2020

Я пишу поисковый запрос из нескольких слов в ElasticSearch, сопоставление нескольких слов более ценно, чем сопоставление 1, но много раз.

1 запрос в нескольких полях:

{
      "bool" : {
        "must" : [
          {
            "simple_query_string" : {
              "query" : "effective date ",
              "fields" : [
                "field1^1.0",
                "field2^5.0",
                "field3^10.0",
              ],
              "flags" : -1,
              "default_operator" : "or",
              "analyze_wildcard" : false,
              "auto_generate_synonyms_phrase_query" : true,
              "fuzzy_prefix_length" : 0,
              "fuzzy_max_expansions" : 50,
              "fuzzy_transpositions" : true,
              "boost" : 1.0
            }
          }
        ],
        "adjust_pure_negative" : true,
        "boost" : 1.0
      }
    }

Когда я ищу "эффективную дату ИЛИ"

Например:

"Это пример дата для эффективного расчета задачи «

должен набрать больше, чем:

» дата дата дата - это то, что он сказал детям »

как мне настроить для этого elasticsearch?

Спасибо!

1 Ответ

1 голос
/ 17 июня 2020

Поскольку вы не упомянули в вопросе о том, сколько полей вы проиндексировали, я взял только одно поле, т.е. title

Проиндексированные документы:

{
    "title":"This is an example date for effective calculation of the problems"

}
{
    "title":"date date date is what he said to the children"

}

Поисковый запрос:

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "effective date",
            "operator": "or",
            "fields": [
             "title"                    --> If you have more fields, you can 
                                            add them here
            ]
          }
        }
      ]
    }
  }
}

Результат поиска:

"hits": [
        {
            "_index": "my_index",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.85874003,
            "_source": {
                "title": "This is an example date for effective calculation of the problems"
            }
        },
        {
            "_index": "my_index",
            "_type": "_doc",
            "_id": "2",
            "_score": 0.289459,
            "_source": {
                "title": "date date date is what he said to the children"
            }
        }
    ]

Чтобы получить подробное описание запроса с несколькими совпадениями, вы можете обратиться к этой официальной документации

ОБНОВЛЕНИЕ 1:

Используя query_string

    {
  "query": {
    "query_string": {
      "default_field": "title",
      "query": "effective OR date"
    }
  }
}

Чтобы получить подробное объяснение query_string, вы можете обратиться к this

UPDATE 2:

Использование simple_query_string

{
  "query": {
    "simple_query_string" : {
        "query": "effective date",
        "fields": ["title"],
        "default_operator": "or"
    }
  }
}

Используя все три вышеупомянутых поисковых запроса, вы получаете тот же результат поиска, и нет никакой разницы в _score

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