1
我有一個工作Elasticsearch查詢,看起來像這樣:Elasticsearch - 基於現場的具體價值提升文檔
{
"index": "event",
"type": "item",
"body": {
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "party",
"type": "phrase_prefix",
"fuzziness": null,
"fields": [
"label^2",
"excerpt",
"body"
]
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"is_deleted": false
}
},
{
"term": {
"is_private": false
}
},
{
"range": {
"date_start": {
"gt": "now"
}
}
}
]
}
}
}
}
}
}
此查詢匹配的關鍵字搜索的事件搜索,是由於在未來和過濾器啓動將任何標記爲已刪除或私人。
每個可以創建事件的用戶也可以向系統購買軟件包。我想提高包裹價值更高的用戶。我相信我需要使用Function Score Query來實現一個自定義的得分功能,但是我無法在文檔中找到自己的頭,並且盲目地嘗試它並沒有讓我獲得任何地方。
舉個例子,索引的文檔可能是這樣的:
[
{
"label": "My Birthday Party",
"excerpt": "Come celebrate with me as I turn 30",
"body": "I'm turning 30 soon, let's go dancing!",
"date_start": "2016-06-19",
"is_deleted": false,
"is_private": false,
"user": {
"id": 1,
"name": "Pablo",
"package": {
"id": 14,
"cost": "1000",
"label": "The \"£10 per month\" package"
}
}
},
{
"label": "House Warming Party",
"excerpt": "I moved house, help me decorate it",
"body": "I love my new house, but it's empty and I have no furniture.",
"date_start": "2016-04-19",
"is_deleted": false,
"is_private": false,
"user": {
"id": 2,
"name": "Gary",
"package": {
"id": 15,
"cost": "5000",
"label": "The \"£50 per month\" package"
}
}
}
]
在其返回這兩個結果的查詢,我怎麼可能在巴勃羅的生日優先考慮窮人加里(誰需要幫助裝潢)的基礎上, Gary的套餐價值較高(即user.package.cost
)。
在其他方面平等的搜索,加里的結果必須第一。
任何指針?
謝謝。
謝謝@richa - 讓我在正確的軌道上!需要啓用[常規]搜索,但是一旦我解決了這個問題,我就可以很好地工作。 – HelloPablo
我在努力編寫一個適當的腳本,它首先檢查user.package是否存在(對於沒有包的用戶它可以爲null)。 'packageCost = doc ['user.package']。值的變化? doc ['user.package.cost']。value:1;返回packageCost * _score'給我[不是]常規錯誤 - 任何指針? – HelloPablo