Elasticsearch の結果に重みを付けようとしています。
現在、公開されたアイテムのみを取得するために、「アクティブな」ブール値のみをフィルタリングしています。
query: {
filtered: {
query: {
match: {
_all: params[:q]
}
},
filter: {
term: {
active: true
}
}
},
}
私は今、私のモデルのいくつかに重みを加えたいと思っています。たとえば、市場は +2 ブーストを取得する必要があります。私はこのようなことを試みていました:(search_typeは私の結果のフィールドで、基本的にはRailsのモデル名です)
POST _search
{
"query": {
"function_score": {
"query": {
"match": {
"_all": "hospitality"
}
},
"functions": [
{
"filter": {
"term": {
"active": true
}
}
},
{
"filter": {
"term": {
"search_type": "Market"
}
},
"weight": 2
}
]
}
}
}
ただし、それは機能していないようです:「関数リストの 1 つのエントリに関数がありません」。だから私"weight": 1
はアクティブなフィルターに追加しました..しかし、今では解析できないと言われています。
私は ElasticSearch の経験がなく、ドキュメントはかなり混乱しています。私も何かを使ってみましたcustom_filters_score
が、私のバージョンの ES ではうまくいかないようです (ここで説明されているように: http://jontai.me/blog/2013/01/advanced-scoring-in-elasticsearch/ )。私が試した別のオプションは、ブールクエリとmustおよびshouldを組み合わせることでしたが、結果はゼロでした...
続行方法がわからない。いくつかの洞察は素晴らしいでしょう。