如何在elasticsearc_dsl

时间:2018-05-18 15:09:54

标签: python-3.x elasticsearch md5 elasticsearch-dsl

我是新的Elasticsearch和elasticsearch_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 :(得分:0)

我同意评论中的JotaGe - 如果md5_of_my_unique_info的类型为keyword,则可以正常(有关如何在dsl中设置映射,请参阅[0])。请注意,如果您没有对映射执行任何操作,则应该通过elasticsearch为您自动创建keyword子字段。

term查询用作filter也可以让您获得更好的效果,因为有弹性搜索不必尝试计算在您的情况下不重要的分数,以及您不必在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

答案 1 :(得分:0)

我的映射是这样的:
    " md5_of_my_unique_info":{                         "输入":" text",                         " fields":{                           "关键字":{                             "输入":"关键字",                             " ignore_above":256                           }                         }                       }
因为我需要自动生成我的映射(我约有4000行的json) 非常感谢你的回答:)