Сегодня я просто погрузился в 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 ~"