Как искать по полям md5 вasticsearc_dsl - PullRequest
0 голосов
/ 18 мая 2018

Я новый Elasticsearch иasticsearch_dsl, и у меня проблема, я хочу провести исследование полей md5, но я не знаю, правильно ли я это делаю.

Вот файл, который ясохранено:

"data": {
        "uniqueInfo": {
                      "md5_of_my_unique_info": "a3e2c73ab0aaze73881db1a889826ada",
                       }

md5_of_my_unique_info - это хэш большой ценности, и я хочу провести исследование, чтобы узнать, существует ли оно в базе данных, поэтому я делаю это:

es_host = {"host": "localhost", "port": 9200}
es = Elasticsearch(hosts=[es_host])
q = Q('bool',
      must[Q('match', data__uniqueInfo__md5_of_my_unique_info=md5_value_I_want_Input)],
      )
s = Search().using(es).query(q)
response = s.execute
for hit in s:
    print(hit.meta.id)

Я проверил его на куче данных (15), и он, кажется, работает, но я не могу проверить его на большем количестве данных в тесте, поэтому кто-то может сказать, правильно ли я это делаю?если нет Как я могу это сделать?

Заранее благодарю всех, кто может мне помочь

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

мое отображение выглядит так:"md5_of_my_unique_info": {"тип": "текст", "поля": {"ключевое слово": {"тип": "ключевое слово", "ignore_above": 256}}}потому что мне нужно автоматически сгенерировать свое отображение (у меня json около 4000 строк) большое спасибо за ваш ответ :)

0 голосов
/ 19 мая 2018

Я согласен с JotaGe в комментарии - это нормально, если md5_of_my_unique_info имеет тип keyword (см. [0] о том, как установить сопоставления в dsl).Обратите внимание, что если вы ничего не сделали с сопоставлениями, у вас должно быть подполе keyword, автоматически созданное для вас с помощьюasticsearch.

Использование запроса term в качестве filter также повысит производительность.так какasticsearch не будет пытаться вычислить оценку, которая не должна иметь значения в вашем случае, и вам не нужно будет оборачивать ваш запрос в запрос bool.

В целом ваш код будет выглядеть так:

es_host = {"host": "localhost", "port": 9200}
es = Elasticsearch(hosts=[es_host])
s = Search().using(es)
s = s.filter('term', data__uniqueInfo__md5_of_my_unique_info__keyword=md5_value_I_want_Input)
response = s.execute
for hit in s:
    print(hit.meta.id)

Надеюсь, это поможет!

0 - http://elasticsearch -dsl.readthedocs.io / en / latest / persistence.html # doctype

...