asticsearch more_like_this этот запрос не работает для массивов больше чем размер 6 - PullRequest
0 голосов
/ 10 января 2020

У меня есть документы, проиндексированные вasticsearch с полем массива ключевых слов. Ниже приведено сопоставление

{
    "alerts": {
        "aliases": {},
        "mappings": {
            "properties": {
                "recordTags": {
                    "type": "keyword"
             }
        }
    }
}

Я вставляю recordTags как массивы. Один документ имеет 7 уникальных тегов. Еще один документ с одной записью Теги из первого документа.

Первый документ выглядит следующим образом

{
    "_index": "alerts",
    "_type": "_doc",
    "_id": "9bcb78db-77bc-4ed9-9972-d305f145a06a",
    "_version": 30,
    "_seq_no": 481,
    "_primary_term": 5,
    "found": true,
    "_source": {
         "recordTags": [
            "tag1",
            "tag2",
            "tag3",
            "tag4",
            "tag5",
            "tag6",
            "tag7"
        ],
    }
}

Другой документ выглядит ниже

{
    "_index": "alerts",
    "_type": "_doc",
    "_id": "582d9497-c43b-4081-a6c7-189ede176702",
    "_version": 30,
    "_seq_no": 481,
    "_primary_term": 5,
    "found": true,
    "_source": {
         "recordTags": [
            "tag1"
        ],
    }
}

Теперь, когда Я запрашиваю похожие записи для первого документа на основе поля recordTags, оно не дает никаких результатов. Я использую следующий запрос

{
    "query": {
      "bool": {
        "should": [
          {
            "more_like_this": {
              "fields": [
                "recordTags"
              ],
              "like": [
                {
                  "_index": "alerts",
                  "_id": "9bcb78db-77bc-4ed9-9972-d305f145a06a"
                }
              ],
              "min_term_freq": 1,
              "min_doc_freq": 1,
              "max_query_terms": 12
            }
          }
        ]
      }
    }
}

Может кто-нибудь просветить меня в этом. Я не могу выяснить проблему.

1 Ответ

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

Причиной стал параметр minimum_should_match. Значение по умолчанию для этого параметра 30%. Это означает, что как минимум 30% терминов в исходном документе должны совпадать в целевом документе. Если 30% числа терминов оказывается значением с плавающей запятой, он принимает значение в полях.

Поскольку в исходном документе имеется 7 терминов, ему необходимо как минимум 30%, т. Е. 2.1, т. Е. 2 условия, чтобы соответствовать в документе, чтобы претендовать на результат. Изменение значения параметра minimum_should_match сработало.

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