2014-09-22 43 views
4

例如,我有兩個字段 - 文本和日期的實體。我希望實體搜索結果按日期排序。但是,如果我簡單地做,那麼結果是意想不到的。
對於搜索查詢「Iphone 6」,最新的文本僅在「6」結果的頂部顯示「6」,而不是「iPhone 6」。沒有排序結果看起來不錯,但沒有按日期按我的要求排序。
如何編寫將考慮相關性和日期的自定義排序函數?或者可能是存在的方式來給場地的重量日期,這將在得分考慮?ElasticSearch - 按相關性和自定義字段對搜索結果進行排序(日期)

另外,可能是我只想用「6」來壓制搜索結果。例如,如何自定義搜索以僅通​​過bigrams查找結果?

+0

這是否解決問題了嗎? – 2014-09-23 04:53:08

+0

不,請參閱我的意見 – razon 2014-09-23 05:00:43

+0

你好,你解決了這個問題嗎? – KimboQi 2017-03-17 15:59:34

回答

9

你有沒有試着用布爾查詢這樣

{ 
    "query": { 
    "bool": { 
     "must": { 
     "match": { 
      "field": "iphone 6" 
     } 
     } 
    } 
    }, 
    "sort": { 
    "date": { 
     "order": "desc" 
    } 
    } 
} 

或與您查詢,您還可以做我猜的更合適的方式做到這一點..

只需添加這是排序

"sort": [ 
     { "date": { "order": "desc" }}, 
     { "_score": { "order": "desc" }} 
    ] 

全部匹配結果以日期排序,然後按相關性排序。

+0

不,不幸的是,你的建議不能按我的需要。這些查詢僅在結果頂部返回文本「6」 – razon 2014-09-23 04:59:34

+0

發佈您的查詢 – 2014-09-23 05:00:23

+0

至少排序和相關性的事情應該這樣工作現在有查詢部分發布您的查詢在這裏讓我看看我是否可以幫助你.. – 2014-09-23 05:02:50

0

對此,您絕對可以使用phrase matching query。 它確實進行位置感知匹配,因此只有在搜索字段中出現「iphone」和「6」並且它們的出現符合此次序,「iphone」出現在「6」之前時,文檔纔會被視爲與您的查詢匹配。

+0

同樣的問題發生在我身上,詞組查詢有一個嚴格的條件,即所有的單詞都必須在文檔中,但是如果查詢被允許包含一些不在文檔中的額外單詞,那麼短語查詢將不起作用。 – KimboQi 2017-03-18 08:47:40

1

看起來像你想按相關性排序,然後按日期排序。這個查詢就可以做到。

{ "query" : { 
    "match" : { 
     "my_field" : "my query" 
     } 
    }, 
    "sort": { 
    "pubDate": { 
     "order": "desc", 
     "mode": "min" 
     } 
    } 
} 

當多個值的字段進行排序時,請記住 值沒有任何內在的順序;一個多值字段只是一個值包。你選擇哪一個排序?對於數字和 日期,可以使用最小值,最大值,平均值或總和分類模式將多值字段減少爲單個值。例如,您可以使用上述查詢在每個日期字段中的 上排序最早的日期。

elasticsearch guide sorting

相關問題