2016-01-13 89 views
0

我需要另一个PARAM“类型”添加到我的查询与Django ElasticSearch/pyes:如何使用两个过滤器进行搜索?

过滤这是我现在所拥有的,它为我的作品:

conn = pyes.ES(settings.ES_URL) 
    query_string = self.request.GET['q'].lower() 
    type = self.request.GET['type'].lower()#not used yet! 

    ... 

    query1 = pyes.MultiMatchQuery(self.FIELDS_SEARCH, query_string, operator='and') 

    search1 = pyes.Search(query=query1, filter=filters, fields=self.RESPONSE_FIELDS, size=num, index_boost=1) 

    response = conn.search_multi([search1, search2], indices_list=[es_alias] * 2, doc_types_list=['asset', 'people'] * 2) 

    response._do_search() 

我怎样才能通过PARAM添加过滤“型“?

+0

你在说'_type'吗?或者是在你的索引中键入一个字段? – ChintanShah25

+0

类型是一个参数我想过滤'type = self.request.GET ['type']' – Armance

+0

相同query_string – Armance

回答

0

我认为你正在寻找bool query

query1 = pyes.MultiMatchQuery(self.FIELDS_SEARCH, query_string, operator='and') 

typequery = pyes.QueryStringQuery(query="type_value",default_field="type") 

combinequery = pyes.BoolQuery(must=[query1, typequery]) 

searchquery = pyes.Search(query=combinequery,filter=filters, fields=self.RESPONSE_FIELDS, size=num, index_boost=1) 

这里是链接到query string,您可以用should取代must如果你想OR条件。

这有帮助吗?

+0

谢谢,但我仍然需要保持“search2”,我只是用“ searchquery“,你这样写:'conn.search_multi([serachquery,search2])'? – Armance

+0

虽然我不是100%,请尝试替换它。它应该通过ES api进行多次搜索,但我不是寻找multi_search的pyes文档,你能帮我找到它吗? – ChintanShah25

+0

'search1 = pyes.Search(query = query1,filter = filters,fields = self.RESPONSE_FIELDS,size = num,index_boost = 1)' by 'searchquery = pyes.Search(query = combinequery) ' 如何处理search1中的所有参数(过滤器,字段,大小和索引)? – Armance