Можете ли вы найти совпадение по n-граммованному / опущенному запросу?(ES 2.3) - PullRequest
0 голосов
/ 23 апреля 2019

То, что я пытаюсь сделать, это использовать ElasticSearch, чтобы сделать обратные адреса, которые похожи на один адрес.Скажи кому-нибудь вход "123 Main St."но у данных есть «123 ГЛАВНАЯ УЛИЦА ЮГ», они возвращали бы это как частичное совпадение.

Итак, у меня есть следующие настройки в моем поле улицы в ElasticSearch:

{
    "mappings": {
        "addresses": {
            "properties": {
                "street1": {
                    "type": "string",
                    "analyzer": "street_analyzer"
                }
            }
        }
    },
    "settings": {
        "index": {
            "analysis": {
                "analyzer" : {
                    "street_analyzer" : {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": ["standard", "lowercase", "street_filter_synonym", "street_filter_stop", "stop", "street_filter_shingle"]
                    }
                },
                "filter": {
                    "street_filter_synonym": {
                        "type" : "synonym",
                        "ignore_case": true,
                        "synonyms" : []
                    },
                    "street_filter_stop" : { 
                        "type" : "stop",
                        "ignore_case": true,
                        "stopwords": []
                    },
                    "street_filter_shingle": {
                        "type" : "shingle",
                        "output_unigrams" : true,
                        "min_shingle_size" : 2,
                        "max_shingle_size" : 5
                    }
                }
            }
        }
    }
}

И япытаясь выполнить поиск в этом поле следующим образом:

{
    "query": {
        "match": {
            "street1": {
                "query": "436 5TH AVE",
                "fuzziness": "AUTO",
                "operator": "and",
                "analyzer":"street_analyzer"
            }
        }
    }
}

Я получаю совпадение, но если я делаю такой же поиск с "436 5-й AVE SOUTH", я не получаю.Я думал, что из-за совпадения он будет совпадать по частям, так как он маркирует и индексированное поле, и строку запроса, но это не так.

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

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