Фильтр синонимов Elasti c Search (Все версии) дает неожиданные результаты - PullRequest
0 голосов
/ 15 января 2020

Когда я создаю индекс с поисковым анализатором по умолчанию, имеющим фильтр синонимов, как показано ниже

{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "tokenizer": "whitespace",
          "filter": [
            "lowercase"
          ]
        },
        "default_search": { 
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "my_synonym_filter"
          ]
        }
      },
      "filter": {
        "my_synonym_filter": {
          "type": "synonym",
          "synonyms": [
            "dns => domain name service",
            "wi fi => wifi"
          ]
        }          
      }
    }
  }
}
'

, и запускаю запрос

curl -X GET "localhost:9200/synonym_filter_check/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
  "text" : "wi fi",
  "analyzer": "default_search"
}
'

, я ожидаю, что вход сначала будет токенизирован на пробел, разбивая wi fi на wi и fi, которые затем должны быть переданы в фильтр синонимов. Поскольку фильтр синонимов не имеет сопоставления для wi и fi, он не должен ничего отображать здесь, и в конечном выводе должно быть два токена с именами wi и fi. Тем не менее, в результате получается

{
  "tokens" : [ {
    "token" : "wifi",
    "start_offset" : 0,
    "end_offset" : 5,
    "type" : "SYNONYM",
    "position" : 0
  } ]
}

wifi - это значение сопоставления ключа wi fi в моем сопоставлении синонимов. Может кто-нибудь помочь мне понять, почему это происходит?

...