ElasticSearch - Получить ключ искомого значения - PullRequest
0 голосов
/ 06 июля 2018

Я ищу ключевое слово machine4 в моем ES. Мой клиент Python просто:

result = es.search('machine4', index='machines')

Результат выглядит так

[
    {
        "_score": 0.13424811,
        "_type": "person",
        "_id": "2",
        "_source": {
            "date": "**20180601**",
            "deleted": [],
            "changed": [
                "machine1",
                "machine2",
                "machine3"
            ],
            "**added**": [
                "**machine4**",
                "machine5"
            ]
        },
        "_index": "contacts"
    },
    {
        "_score": 0.13424811,
        "_type": "person",
        "_id": "3",
        "_source": {
            "date": "**20180701**",
            "deleted": [
                "machine2"
            ],
            "**changed**": [
                "machine1",
                "**machine4**",
                "machine3"
            ],
            "added": [
                "machine7"
            ]
        },
        "_index": "contacts"
    }
]

Итак, мы можем легко увидеть: На дату 20180601 г. машина 4 принадлежала доп. На дату 20180701 года машина 4 принадлежала измененному.

Я могу написать другую функцию для анализа результата. По сути, просматривайте каждый ключ, значение каждого элемента и проверяйте принадлежность искомого ключевого слова, например:

for result in search_results['hits']['hits']:
    source_result = result['_source']
    for key,value in source_result.items():
        if 'machine4' in value:
            print key

Однако мне интересно, есть ли у ES API для определения того, к какому ключу / отображению / полю принадлежат искомые ключевые слова? В этом случае добавляется 1-го результата, а изменяется во 2-м результате

Большое спасибо Alex

1 Ответ

0 голосов
/ 06 июля 2018

Простой ответ, по-видимому, заключается в том, что нет, у Elasticsearch нет способа сделать это «из коробки», потому что в Lucene его нет, согласно этой теме

Elasticsearch имеет концепцию основных моментов , однако. Они могут быть полезны, но требуют, чтобы вы имели представление о том, в каких полях может быть найдено совпадение.

Документация по поиску в ES Python предполагает, что нет способа сделать это в качестве параметра для поиска, но вы можете создать собственный запрос и передать его в качестве аргумента q. Это будет выглядеть примерно так:

q = {"query" : {"match": { "content": "'machine4'" }}, "highlight" : {"fields" : {"added" : {}, "updated": {}}}}
result = es.search(index='machines', q=q)

Надеюсь, это полезно!

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