Запрос на совпадение Elasticsearch для токенов возвращает менее релевантный результат - PullRequest
0 голосов
/ 04 января 2019

Привет, может кто-нибудь помочь мне понять, как 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. Благодаря.

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