elasticsearch 如何在Elasticsearch中增强给定搜索词的特定文档?
我需要你帮我设计一个真实场景的索引。这可能是一个很长的问题,让我尽量简明扼要地解释一下 我们正在构建一个基于Elasticsearch的搜索平台,为我们的客户提供网站搜索体验,索引中的文档可以是这样的:
elasticsearch 如何在Elasticsearch中增强给定搜索词的特定文档?,
elasticsearch,
elasticsearch,我需要你帮我设计一个真实场景的索引。这可能是一个很长的问题,让我尽量简明扼要地解释一下 我们正在构建一个基于Elasticsearch的搜索平台,为我们的客户提供网站搜索体验,索引中的文档可以是这样的: { "Path":"http://www.foo.com/doc/abc/1", "Title":"Title 1", "Description":"The description of doc 1", ... } { "Path":"http://www.foo.com/doc/abc/2",
{ "Path":"http://www.foo.com/doc/abc/1", "Title":"Title 1", "Description":"The description of doc 1", ... }
{ "Path":"http://www.foo.com/doc/abc/2", "Title":"Title 2", "Description":"The description of doc 2", ... }
{ "Path":"http://www.foo.com/doc/abc/3", "Title":"Title 3", "Description":"The description of doc 3", ... }
...
对于每个查询,返回的命中文档默认按相关性排序,但我们的客户也希望为某些关键字增加一些特定文档
它们为我们提供了以下内容,如增强配置XML:
<boost>
<Keywords value="keyword1">
<Path rank="10000">http://www.foo.com/doc/abc/1</Path>
</Keywords>
<Keywords value="keyword2">
<Path rank="10000">http://www.foo.com/doc/abc/2</Path>
<Path rank="9900">http://www.foo.com/doc/abc/1</Path>
</Keywords>
<Keywords value="keyword3">
<Path rank="10000">http://www.foo.com/doc/abc/3</Path>
<Path rank="9900">http://www.foo.com/doc/abc/2</Path>
<Path rank="9800">http://www.foo.com/doc/abc/1</Path>
</Keywords>
</boost>
然后在查询时,使用嵌套查询获得给定搜索关键字的每个匹配文档的排名值,然后使用评分脚本根据该排名值调整相关性评分
由于boosting XML的秩值远大于正常的相关性得分(通常小于5),因此在boosting XML中为给定关键字配置的文档的调整得分应该是最高分
你认为这是一个关于Elasticsearch的好设计吗?对更好的方法有什么建议吗
提前谢谢 最好将关键字与原始文档一起索引到单独的字段中,然后在搜索过程中,在该字段中增强匹配 这与您描述的不完全一样,因为它不能很好地控制每个关键字的提升因子。但是,如果查询包含特定的关键字,这无疑是一种使特定文档在搜索结果中显示得更高的方法 如果您确实需要更好地控制不同关键字的提升因子,您仍然可以使用此方法。但是您需要创建几个“增强的关键字”字段,并在查询中以不同的方式增强它们 例如:
{ "Path":"http://www.foo.com/doc/abc/1",
"Title":"Title 1",
"Description":"The description of doc 1",
"boost_kw1": "keyword1 keyword2",
"boost_kw2": "keyword3 keyword4" },
{ "Path":"http://www.foo.com/doc/abc/1",
"Title":"Title 1",
"Description":"The description of doc 1",
"boost_kw1": "keyword3",
"boost_kw2": "keyword1 keyword2" }
在查询中,您可以将其作为以下各项的总和:
- 主查询服务器
- “boost_kw1”比赛的分数乘以10
- “boost_kw2”中的比赛分数乘以5
{
"Boost": [
{ "keyword":"keyword1", "rank": 10000},
{ "keyword":"keyword2", "rank": 9900},
{ "keyword":"keyword3", "rank": 9800}
]
"Path":"http://www.foo.com/doc/abc/1",
"Title":"Title 1",
"Description":"The description of doc 1",
...
}
{
"Boost": [
{ "keyword":"keyword2", "rank": 10000},
{ "keyword":"keyword3", "rank": 9900}
]
"Path":"http://www.foo.com/doc/abc/2",
"Title":"Title 2",
"Description":"The description of doc 2",
...
}
{
"Boost": [
{ "keyword":"keyword3", "rank": 10000}
]
"Path":"http://www.foo.com/doc/abc/3",
"Title":"Title 3",
"Description":"The description of doc 3",
...
}
{ "Path":"http://www.foo.com/doc/abc/1",
"Title":"Title 1",
"Description":"The description of doc 1",
"boost_kw1": "keyword1 keyword2",
"boost_kw2": "keyword3 keyword4" },
{ "Path":"http://www.foo.com/doc/abc/1",
"Title":"Title 1",
"Description":"The description of doc 1",
"boost_kw1": "keyword3",
"boost_kw2": "keyword1 keyword2" }