我有下面的Python代码来查询ElasticSearch索引。无论我尝试什么查询,我都会得到一个空的结果集。我好像错过了一些基本的窍门。
import sys
import pyes
from pyes.query import TermQuery, FuzzyLikeThisFieldQuery, BoolQuery
conn = pyes.ES(('http', '?????.qbox.io', '80'))
INDEX = "postoffice"
def state_query(doc):
return TermQuery(field="STATE_ALPHA", value=doc["state"])
def fuzzy_county_query(doc):
return FuzzyLikeThisFieldQuery(field="COUNTY_NAME", like_text=doc["county"])
def fuzzy_name_query(doc):
return FuzzyLikeThisFieldQuery(field="FEATURE_NAME", like_text=doc["place"])
def find_within_county(doc):
return BoolQuery(must=[state_query(doc), fuzzy_county_query(doc)], should=fuzzy_name_query(doc))
if __name__ == "__main__":
test = dict(place="Rockport", county="Essex", state="MA")
q = find_within_county(test)
print q._serialize()
results = conn.search(query=q, indices=[INDEX])
for result in results:
print result发布于 2014-04-22 19:26:29
事实上,这很简单。术语查询的值应该是小写。下面的操作很好。
def state_query(doc):
return TermQuery(field="STATE_ALPHA", value=doc["state"].lower())我在这个优秀教程里就有了这个想法。
https://stackoverflow.com/questions/23222374
复制相似问题