Elasticsearch映射配置文件提升字段

ric*_*ard 3 search elasticsearch

我是新手,无法解释有关提升映射字段的文档.

我想实现一个简单的提升,其中一些文章的标题比与文章相关的标签更重要.

这是对config的尝试,我在config/[index_name]/[some_name] .json中添加了:

{
    "[type]": {
        "properties": {
            "_boost": {
                "name": "title",
                "null_value": 2.0
            }
            "title": {
                "type": "string"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以告诉文件正在被读取,因为之前尝试此文件的错误消息.我也一直在删除索引并在尝试之间重新创建它,以便它将使用此映射.

这会有用吗?它没有给出任何错误消息,但是我无法判断_search的输出是否有任何提升或者获取_mapping API调用.

以下是_mapping调用的结果:

{
    "[type]" : {
        "properties" : {
            "title" : {
                "type" : "string"
            }
            "tags": {
                "type" : "string"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

jav*_*nna 10

请查看boost字段文档中的示例.

boost字段映射(应用于根对象)允许定义boost字段映射,其内容将控制文档的提升级别

以下映射定义了一个名为的字段_boost.如果_boost字段本身存在于索引的JSON文档中,则其值将控制索引文档的提升级别.

{
    "tweet" : {
        "_boost" : {"name" : "_boost", "null_value" : 1.0}
    }
}
Run Code Online (Sandbox Code Playgroud)

没有什么特别的,这个例子只是告诉elasticsearch将_boost字段视为原样,并1.0在不存在时为其提供默认值.但是您要为特定文档定义一个提升:这意味着当文档与查询匹配时,其分数将根据_boost您应用于根对象的字段映射进行提升.这与场地级别的提升没有任何关系.

您的映射表示您title应该使用该字段的内容_boost,并且您将使用默认的_boost值2.0.

"_boost": {
    "name": "title",
    "null_value": 2.0
}
Run Code Online (Sandbox Code Playgroud)

这是没有意义的,因为标题包含文本,并且它不是你想要的.

有不同的方法可以更加重视球场上的title比赛.

据我所知,从文档中你可以在你的映射中这样做:

{
    "[type]" : {
        "properties" : {
            "title" : {
                "type" : "string",
                "boost" : 2.0
            }
            "tags": {
                "type" : "string"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

老实说,我没有尝试过,也从未使用它,但lucene确实允许你在索引时指定每场的提升.提升成为该领域规范的一部分,并在特定领域匹配时予以考虑.所以,这就是你要找的东西.

无论如何,我个人会在查询时而不是索引时间进行提升,因此您无需修改​​映射,也可以在不重新编制索引的情况下更改权重.例如,您可以使用查询字符串并在不同的字段上搜索,为它们提供不同的权重,如下所示:

{
    "query_string" : {
        "fields" : ["title^2", "content"],
        "query" : "this AND that OR thus"
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要考虑查询字符串查询被解析并允许您使用lucene查询语法.

此外,您可以使用bool查询将不同的查询组合在一起.您可以使用包含例如术语查询和特定提升的should子句来表达对标题匹配的提升,如下所示:

"should" : [
    {
        "term" : { "title" : "your query", "boost" : 2.0 }
    }
]
Run Code Online (Sandbox Code Playgroud)

您可以使用任何您想要的查询作为if子句.如果您使用术语查询,则需要记住它未被分析.