给定像这样的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/

10-13 00:34