给定像这样的elasticsearch文档:
{
"name": "bob",
"title": "long text",
"text": "long text bla bla...",
"val_a1": 0.3,
"val_a2": 0.7,
"val_a3": 1.1,
...
"val_az": 0.65
}
我需要在Elastisearch上进行搜索,在文本字段上使用给定的增强值,再在文档中使用从命名字段
val_xy
获得的增强值。例如,搜索可以是:
在文本上具有boost值的
"long"
:2.0
和常规boost val_a6
因此,如果在文本字段上找到
"long"
,我将使用2.0的增强值,并使用字段值val_a6
中的增强值。如何在Java Elasticsearch客户端上执行此搜索?这是可能的?
最佳答案
您想要的是一个function_score查询。该文档不是最好的文档,可能会造成很大的混乱。但是,使用上面的示例,您将执行以下操作:
"function_score": {
"query": {
"term": {
"title": "long"
}
},
"functions": [
{
"filter": {
"term": {
"title": "long"
}
},
"script_score": {
"script": "_score*2.0*doc['val_a6'].value"
}
}
],
"score_mode": "max",
"boost_mode": "replace"
}
我对function_score查询的看法是,我想知道您可以在“功能”部分中进行过滤,包括 bool(boolean) 过滤器。
关于java - elasticsearch选择用于增强的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23399938/