ElasticSearch Совпадение всего документа - PullRequest
1 голос
/ 22 сентября 2019

У меня есть такой индекс:

"mappings": {
    "_doc": {
        "properties": {
            "key_words": {"type": "text", "analyzer": "english", "search_analyzer": "english", "index": True},
            "name": {"type": "text", "index": False},
        }
    }

этот индекс содержит названия тем и ключевые слова, которые должны быть сопоставлены, чтобы связать эту тему с каким-либо текстом.Поэтому мне нужно выполнить поиск по индексу тем, используя длинный текст, и найти все темы, которые полностью совпадают.Например, если у меня есть следующие темы в индексе:

{"name": "a", "key_words": "World cup"}
{"name": "b", "key_words": "Gaming cup"}
{"name": "c", "key_words": "Cup"}

И текст:

The World Championship, some country win the Cup on tennis!

Я хочу сделать запрос, используя «текст», который будет соответствовать только «aДокументы "и" c ", поскольку все ключевые слова из документа присутствуют в тексте.

Может кто-нибудь помочь мне с построением этого запроса?Версия ES: 6,8

1 Ответ

1 голос
/ 23 сентября 2019

Спасибо за Jaspreet Chahal за ссылку в комментариях, я нашел решение там.Я изменил отображение, чтобы оно начинало выглядеть так:

{
"mappings": {
    "_doc": {
        "properties": {
            "key_words": {"type": "text", "analyzer": "english", "search_analyzer": "english", "index": True, "fielddata": True},
            "name": {"type": "text", "index": False},
        }
    }
}

}

, и мне нужно было выполнить поиск по двум вызовам, во-первых, проанализировать текст и сгенерировать токены * 1006.*

analyzed = await el.indices.analyze(body={"analyzer": "english", "text": "The World Championship, some country win the Cup on tennis!"})

и затем вызов с условием сценария

{
        "query": {
            "bool": {
                "must": [{
                    "match": {
                        "key_words": desc
                    }}],
                "filter": {
                    "script": {
                        "script": {
                            "source": "if(params.search_tokens.containsAll(doc['key_words'].values)){return true;}",
                            "lang": "painless",
                            "params": {
                                "search_tokens": [an['token'] for an in analyzed['tokens']]
                            }
                        }
                    }
                }
            }

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