Elasticsearch термин запрос к номеру токена - PullRequest
1 голос
/ 17 июня 2019

Мне нужно объяснить странное поведение запроса термина в базу данных Elasticsearch, которая содержит числовую часть в строке.Запрос довольно прост:

{
    "query": {
        "bool": {
            "should": [
                {
                    "term": {
                        "address.street": "8 kvetna"
                    }
                }
            ]
        }
    }
}

Проблема в том, что термин 8 kvetna возвращает пустой результат.Я попытался проанализировать это и создать обычные токены, такие как 8, k, kv, kve .... Также я уверен, что в базе данных есть значение 8 кветна.Вот отображение для поля:

{
    "settings": {
        "index": {
            "refresh_interval": "1m",
            "number_of_shards": "1",
            "number_of_replicas": "1",
            "analysis": {
                "filter": {
                    "autocomplete_filter": {
                        "type": "edge_ngram",
                        "min_gram": "1",
                        "max_gram": "20"
                    }
                },
                "analyzer": {
                    "autocomplete": {
                        "filter": [
                            "lowercase",
                            "asciifolding",
                            "autocomplete_filter"
                        ],
                        "type": "custom",
                        "tokenizer": "standard"
                    }
                    "default": {
                        "filter": [
                            "lowercase",
                            "asciifolding"
                        ],
                        "type": "custom",
                        "tokenizer": "standard"
                    }
                }
            }
        }
    },
    "mappings": {
        "doc": {
            "dynamic": "strict",
            "_all": {
                "enabled": false
            },
            "properties": {
                "address": {
                    "properties": {
                        "city": {
                            "type": "text",
                            "analyzer": "autocomplete"
                        },
                        "street": {
                            "type": "text",
                            "analyzer": "autocomplete"
                        }
                    }
                }
            }
        }
    }
}

Что вызвало этот странный результат?Я не понимаю этоСпасибо за любую помощь.

1 Ответ

3 голосов
/ 17 июня 2019

Отличное начало!Ваша единственная проблема заключается в том, что вы используете term запрос, в то время как вы должны использовать match.Запрос term попытается найти точное соответствие для 8 kvetna, а это не то, что вам нужно.Будет работать следующий запрос:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {                               <--- change this
            "address.street": "8 kvetna"
          }
        }
      ]
    }
  }
}
...