Как получить нечеткий поиск упорядоченного поиска по множественным совпадениям, чтобы всегда возвращать минимальное количество результатов - PullRequest
0 голосов
/ 12 сентября 2018

Сегодня я просто погрузился в Elasticsearch и пытаюсь заменить существующий нечеткий поиск реализации lucene.net аналогичным запросом Elasticsearch.

Я использую Elasticsearch.Net ElasticLowLevelClient

Запуск этого в качестве моего сервера через докер

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.4.0

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

Я бы хотел, чтобы мой запрос всегда возвращался0 баллов.

Например, у меня есть документ со значением столбца tatra

Запрос на "tat"

Возвращает 5 результатов, но не tatra

Запрос к "tatr"

возвращает результат tatra

var node = new Uri("http://127.0.0.1:9200");
var config = new ConnectionConfiguration(node);
_client = new ElasticLowLevelClient(config);

var searchResponse = await _elasticsearchService._client.SearchAsync<StringResponse>(
    indexName,
    indexName,
    // https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
    PostData.Serializable(new
    {
        from = 0,
        size = maxReturnCount,
        min_score = 0.0,
        query = new
        {
            multi_match = new
            {
                fields = "*",
                type = "most_fields",
                query = string.Join(" ", queryParts),
                fuzziness = "AUTO",
                zero_terms_query = "all"
            }
        }
    })
);

Запрос, который я ранее использовал в lucene, был чем-то вроде "tat ~"

1 Ответ

0 голосов
/ 12 сентября 2018

По документам Elasticsearch , по нечеткости: AUTO

генерирует расстояние редактирования на основе длины термина. Опционально могут быть предоставлены аргументы для низкого и высокого расстояния. AUTO: [low], [high], если не указано, значения по умолчанию - 3 и 6, что эквивалентно AUTO: 3,6, что для длин:

0..2
должно точно соответствовать
3..5
разрешено одно редактирование
> 5
разрешено два редактирования

Итак, если вы хотите разрешить 2 редактирования независимо от длины термина, не используйте auto. Используйте нечеткость = 2.

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