Фраза из нескольких слов в поиске simple_query_string не возвращает данные выделения, но возвращает с любым ненулевым интервалом

#elasticsearch #lucene #aws-elasticsearch

#elasticsearch #lucene #aws-elasticsearch

Вопрос:

При использовании simple_query_string у меня возникает своеобразное поведение выделения, возникающее при использовании simple_query_string с любым маркером (обычный, унифицированный, fvh)

  1. Основные моменты работают, когда в простой строке запроса используются термины (не фразы): работает, когда используются только термины

  2. Выделения перестают работать, когда вы закрываете цитаты, фактически превращая обычную встречу в фразу: не работает вообще при поиске по фразе

  3. Но если я добавлю значение, превышающее 0, к ранее не работающей фразе, она снова будет работать нормально, хотя и с неправильным набором результатов, поскольку я не хотел, чтобы результаты были ошибочными: работает нормально, если я ошибаюсь, однако

При использовании прямых запросов API ключ выделения полностью исчезает в результате при поиске фразы с нулевым значением slop (или значение slop не определено, что приводит к поведению на втором шаге выше.

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

         "query": {
          "simple_query_string": {
            "query": query,
            "fields": ["title", "content"]
          }
        },
        "highlight": {
          "fields": {
            "title": {},
            "content": {}
          }
        }
  

Рассматриваемое поле (заголовок, содержимое) для выделения имеет следующие сопоставления:

 "properties" : {
    "content" : {
      "type" : "text",
      "fields" : {
        "autosuggest" : {
          "type" : "text",
          "analyzer" : "autosuggest_analyzer",
          "search_analyzer" : "ngram_search_analyzer"
        },
        "delimiter" : {
          "type" : "text",
          "index_options" : "offsets",
          "analyzer" : "universal_delimiter_analyzer"
        },
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        },
        "lang" : {
          "type" : "text",
          "analyzer" : "universal"
        },
        "synonyms" : {
          "type" : "text",
          "analyzer" : "synonyms"
        }
      },
      "analyzer" : "standard",
      "index_prefixes" : {
        "min_chars" : 1,
        "max_chars" : 12
      },
      "index_phrases" : true
    },
    "title" : {
      "type" : "text",
      "fields" : {
        "autosuggest" : {
          "type" : "text",
          "analyzer" : "autosuggest_analyzer",
          "search_analyzer" : "ngram_search_analyzer"
        },
        "delimiter" : {
          "type" : "text",
          "index_options" : "offsets",
          "analyzer" : "universal_delimiter_analyzer"
        },
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        },
        "lang" : {
          "type" : "text",
          "analyzer" : "universal"
        },
        "synonyms" : {
          "type" : "text",
          "analyzer" : "synonyms"
        }
      },
      "analyzer" : "standard",
      "index_prefixes" : {
        "min_chars" : 1,
        "max_chars" : 12
      },
      "index_phrases" : true
    },
    ...
  

Наконец, вот информация о версии:

   "version" : {
    "number" : "7.9.0",
    "build_flavor" : "oss",
    "build_type" : "rpm",
    "build_hash" : "a479a2a7fce0389512d6a9361301708b92dff667",
    "build_date" : "2020-08-11T21:36:48.204330Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  

Кто-нибудь когда-нибудь сталкивался с этим? Есть ли что-то явно очевидное, чего мне здесь не хватает? Это сбивает с толку, поскольку оно отлично работает с slop, но в противном случае даже не возвращает запись выделения в результате. Ни один другой вопрос / решение, которое я видел на сегодняшний день, похоже, не имеет отношения к этой проблеме.

Комментарии:

1. Я могу воспроизвести поведение, описанное выше. Хотелось бы посмотреть, есть ли хорошее объяснение того, что может здесь происходить.