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子句.如果您使用术语查询,则需要记住它未被分析.