2014-04-22 4 views
0

다음 Python 코드를 사용하여 ElasticSearch 인덱스를 쿼리합니다. 어떤 쿼리를 사용해도 결과가 비어 있습니다. 나는 약간의 기본적인 트릭을 여기에서 놓치고있는 것처럼 보인다.pyES에서 검색어를 제출하는 방법은 무엇입니까?

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 

답변

0

실제로 간단합니다. 용어 쿼리의 값은 소문자 여야합니다. 다음은 잘 작동합니다.

def state_query(doc): 
    return TermQuery(field="STATE_ALPHA", value=doc["state"].lower()) 

나는이 excellent tutorial에서 아이디어를 얻었다.

+0

더 정확하게는 용어 쿼리는 실제 쿼리가 아닌 필터입니다. 필터는 정확한 일치를 찾기 때문에 분석기를 통과하지 않습니다. 간단한 소문자 분석기를 켜 놓은 것 같습니다. – korenmiklos

관련 문제