Возвращать документы, которые соответствуют минимальному количеству слов в одном предложении - PullRequest
0 голосов
/ 05 августа 2020

Мне нужно вернуть документы, которые соответствуют как минимум N словам в одном предложении.

Я разделяю свои документы на предложения и индексирую каждый как отдельное значение, например:

PUT /test_index/_doc/id1
    {
      "texts": [
"Your first step is the subject line.",
"You will have just seconds to gain the full attention of your reader."]
    }

и оставьте для position_increment_gap значение по умолчанию 100.

Допустим, мне нужно сопоставить минимум 2 слова. Мне нужно вернуть документ, если я ищу термины («бла», «внимание», «читатель»), но не («бла», «тема», «читатель»). «bla» отсутствует в документе, «внимание» и «читатель» находятся в одном предложении, «субъект» и «читатель» - нет. , поскольку этот запрос возвращает документ, хотя этого не должно быть:

"query" : {
          "bool": {
            "should": [
              {"term": {"texts": "subject"}},
              {"term": {"texts": "reader"}}
            ],
            "minimum_should_match": 2
          }
      }

Мне нужен способ смешать близость и минимум должны совпадать. Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 05 августа 2020

Нет никаких условий для определения slop среди предложений, присутствующих в should , что делает очевидным, что у нас не может быть запроса, который мог бы учитывать близость между предложениями в должен.

{
  "error": {
    "root_cause": [
      {
        "type": "parsing_exception",
        "reason": "[bool] query does not support [slop]",
        "line": 17,
        "col": 42
      }
    ],
    "type": "parsing_exception",
    "reason": "[bool] query does not support [slop]",
    "line": 17,
    "col": 42
  },
  "status": 400
}

Однако мы можем добавить min_should_match между разными предложениями, имея в них поиск близости.

GET test-index/_search
{
  "query": {
    "bool": {
      "should": [
       {
         "match_phrase": {
           "texts": {
             "query": "Your step",
             "slop": 10
           }
         }
       },
       {
         "match_phrase": {
           "texts": {
             "query": "will have",
             "slop": 10
           }
         }
       }
       ],"minimum_should_match": 2
    }
  }
}
...