Elasticsearch映射配置文件boost字段
我是搜索新手,在解释地图中有关增强字段的文档时遇到困难 我想实现一个简单的提升,其中一些文章的标题比与文章相关联的标签更重要 下面是我在config/[index\u name]/[some\u name]中放置的配置的一次尝试Elasticsearch映射配置文件boost字段,search,elasticsearch,Search,elasticsearch,我是搜索新手,在解释地图中有关增强字段的文档时遇到困难 我想实现一个简单的提升,其中一些文章的标题比与文章相关联的标签更重要 下面是我在config/[index\u name]/[some\u name]中放置的配置的一次尝试 { "[type]": { "properties": { "_boost": { "name": "title", "null_value": 2.0
{
"[type]": {
"properties": {
"_boost": {
"name": "title",
"null_value": 2.0
}
"title": {
"type": "string"
}
}
}
}
我可以看出文件正在读取,因为以前尝试读取此文件时出现错误消息。我还一直在删除索引,并在尝试之间重新创建它,以便它将使用此映射
这样行吗?它没有给出任何错误消息,但我无法判断_search或get映射API调用的输出是否有任何效果
以下是_映射调用的结果:
{
"[type]" : {
"properties" : {
"title" : {
"type" : "string"
}
"tags": {
"type" : "string"
}
}
}
}
请看中的示例 boost字段映射(应用于根对象)允许定义 一个boost字段映射,其内容将控制boost级别 文件的内容 下面的映射定义了一个名为
\u boost
的字段。如果索引的JSON文档中存在\u boost
字段本身,则其值将控制索引文档的boost级别
{
"tweet" : {
"_boost" : {"name" : "_boost", "null_value" : 1.0}
}
}
没有什么特别的,这个例子只是告诉弹性搜索来考虑<代码>“Booxfield”,当不存在时,给它一个默认的< <代码> 1 >代码>值。但是您正在为特定文档定义一个boost:这意味着当文档与查询匹配时,它的分数将根据您应用于查询的
\u boost
字段映射进行提升。这与场上的助推无关
在映射中,您说的是标题
字段的内容应该用作\u boost
,您给出的默认值为2.0
"_boost": {
"name": "title",
"null_value": 2.0
}
这是没有意义的,因为标题包含文本,我想这也不是你想要的
在标题
字段中,有不同的方法来提高匹配的重要性
据我从文档中了解,您可以在映射中这样做:
{
"[type]" : {
"properties" : {
"title" : {
"type" : "string",
"boost" : 2.0
}
"tags": {
"type" : "string"
}
}
}
}
{
"query_string" : {
"fields" : ["title^2", "content"],
"query" : "this AND that OR thus"
}
}
"should" : [
{
"term" : { "title" : "your query", "boost" : 2.0 }
}
]
老实说,我以前从未尝试过,也从未使用过,但lucene确实允许您在索引时指定每个字段的提升。该提升成为该领域规范的一部分,并在特定领域出现匹配时予以考虑。这就是你想要的
无论如何,我个人会在查询时而不是索引时进行增强,这样您就不需要修改映射,也可以在不重新索引的情况下更改权重。例如,您可以在不同的字段上使用和搜索,给它们不同的权重,如下所示:
{
"[type]" : {
"properties" : {
"title" : {
"type" : "string",
"boost" : 2.0
}
"tags": {
"type" : "string"
}
}
}
}
{
"query_string" : {
"fields" : ["title^2", "content"],
"query" : "this AND that OR thus"
}
}
"should" : [
{
"term" : { "title" : "your query", "boost" : 2.0 }
}
]
您需要考虑对查询字符串查询进行解析,并允许您使用
此外,您可以使用将不同的查询组合在一起。您可以使用一个包含例如a的should子句来表示标题匹配的提升,并对其进行如下特定提升:
{
"[type]" : {
"properties" : {
"title" : {
"type" : "string",
"boost" : 2.0
}
"tags": {
"type" : "string"
}
}
}
}
{
"query_string" : {
"fields" : ["title^2", "content"],
"query" : "this AND that OR thus"
}
}
"should" : [
{
"term" : { "title" : "your query", "boost" : 2.0 }
}
]
您可以使用任何您想要的查询作为should子句。如果你使用术语查询,你需要记住它不是经过分析的。我被其他一些帖子所引导,所以我阅读了这些帖子,相信索引时间的增加会更有效。但是在查询中调整boost设置的能力可能是更好的方法。谢谢你的清晰解释。是的,如果你在查询时提高性能,你会付出一点性能代价。我更新了我关于提高场上水平的问题,因为我向上看了看,它确实如你们所期望的那样起作用。这只是一个选择你喜欢的时间的问题:索引时间还是查询时间。根据克林顿·戈姆利和扎卡里·唐的《Elasticsearch:权威指南》一书,不建议使用索引时间提升。例如,如果需要更改索引,则需要增加时间来重新索引所有文档。此外,如果具有索引时间提升的字段具有多个值,则提升将为每个值乘以自身,从而显著增加该字段的权重,这不是您通常想要的。