2016-01-13 85 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