Привет, может кто-нибудь помочь мне понять, как Elasticsearch оценивает актуальность токенов? У меня есть поле nn , отображение которого выглядит как
{
"settings": {
"index": {
"refresh_interval": "-1",
"number_of_shards": "4",
"analysis": {
"filter": {
"stopwords_SK": {
"ignore_case": "true",
"type": "stop",
"stopwords_path": "stopwords/slovak.txt"
},
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": "2",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete": {
"filter": [
"stopwords_SK",
"lowercase",
"stopwords_SK",
"autocomplete_filter"
],
"type": "custom",
"tokenizer": "standard"
}
}
},
"number_of_replicas": "1"
}
},
"mappings": {
"doc": {
"dynamic": "strict",
"properties": {
"nn": {
"type": "text",
"fielddata": true,
"fields": {
"raw": {
"type": "keyword"
}
},
"boost": 10,
"analyzer": "autocomplete"
}
}
}
}
}
Поле nn: tokenized через стандартный токенизатор. Следующий простой запрос работает хорошо и возвращает соответствующий результат, такой как "softone sro", "softec sro" ...
{
"_source": [
"nn",
"nazov"
],
"size": 10,
"query": {
"bool": {
"must": [
{
"match": {
"nn": "softo"
}
}
]
}
}
}
Но если мне нужно добавить , если условие к запросу, он не возвращает абсолютно никаких релевантных результатов, и предыдущие наиболее релевантные, такие как "sofone" или "softtex" отсутствуют. Например, возвращается " zo soz kovo zts nova as zts elektronika as " или " agentura socialnych sluzieb ass no " ...
Вот запрос должен
{
"_source": [
"nn",
"nazov"
],
"size": 10,
"query": {
"bool": {
"must": [
{
"match": {
"nn": "softo"
}
}
],
"should": [
{
"match": {
"nn": "as"
}
},
{
"match": {
"nn": "sro"
}
}
]
}
}
}
Почему в результате запроса должны отсутствовать элементы "sofone" и "softtex", которые наиболее актуальны в первом запросе? Я думаю, что актуальность основана на длине токена, что означает, что токен sotf более актуален, чем токен so.
Благодаря.