elasticsearch 基于字段值增强ElasticSearch结果
我是一个ElasticSearchNoob,我正试图找出如何提高“title”字段中包含搜索词的搜索结果的相关性。例如,如果有两个文档:
elasticsearch 基于字段值增强ElasticSearch结果,
elasticsearch,
elasticsearch,我是一个ElasticSearchNoob,我正试图找出如何提高“title”字段中包含搜索词的搜索结果的相关性。例如,如果有两个文档: Title=“测试表单”Description=“这是一个新表单” Title=“新表格”Description=“测试” 如果用户在所有字段中搜索“test”,则文档1应得到增强,因为搜索词出现在标题字段中 我试图按照文档进行操作,但我不确定应该在何处包含该命令。它是应用于索引还是搜索,或者两者中的任何一个?它是否需要是另一个元素的一部分,或者可以作为单个命
Title=“测试表单”Description=“这是一个新表单”
Title=“新表格”Description=“测试”
PUT http://localhost:9200//global/Form/456
{
"KeyWords": "",
"OneLineDesc": "Test",
"Link": "",
"Title": "Test Form"
}
PUT http://localhost:9200//global/Form/457
{
"KeyWords": "",
"OneLineDesc": "",
"Link": "",
"Title": "Another Form"
}
PUT http://localhost:9200//global/Form/458
{
"KeyWords": "",
"OneLineDesc": "test form",
"Link": "",
"Title": "Ryans Form"
}
PUT http://localhost:9200//global/Form/460
{
"KeyWords": "",
"OneLineDesc": "",
"Link": "",
"Title": "permissions test"
}
PUT http://localhost:9200//global/Form/576
{
"KeyWords": "",
"OneLineDesc": "Test test test test test test test test",
"Link": "",
"Title": "My Test Form"
}
POST http://localhost:9200//global/Form
{
"_boost": {
"name": "Title",
"null_value": 20
}
}
POST http://localhost:9200/_search?search_type=query_then_fetch
{
"from": 0,
"size": 10,
"query": {
"match": {
"_all": {
"query": "test"
}
}
}
}
但是,无论是否在索引后发出boost命令,结果中的分数都是相同的
我更愿意在索引期间执行此增强操作,因为在所有文档中,标题字段将被认为比其他字段更重要。此外,在上面的示例中,每个文档的字段都是常量,但通常情况下并非如此,尽管所有文档都始终有一个标题字段。每个搜索都需要在所有可用字段上执行。一些事情。首先,必须在为文档编制索引之前指定索引时间。boost值在文档编制索引时烘焙到文档中,这意味着您无法在文档编制索引后对其进行boost 这使得索引时间推进非常不灵活,通常很难使用。不建议使用索引时间提升,因为您可以通过查询时间提升完成同样的任务,并且仍然保持灵活性。一般来说,人们希望在不需要重新索引数据的情况下调整提升和得分 我要做的是使用一个多匹配查询,它为您提供了几个好的行为。下面是一个示例(注意,您应该使用小写的索引名和类型名)。首先,像以前一样为数据编制索引:
DELETE /global
PUT /global/form/456
{
"KeyWords": "",
"OneLineDesc": "Test",
"Link": "",
"Title": "Test Form"
}
PUT /global/form/457
{
"KeyWords": "",
"OneLineDesc": "",
"Link": "",
"Title": "Another Form"
}
PUT /global/form/458
{
"KeyWords": "",
"OneLineDesc": "test form",
"Link": "",
"Title": "Ryans Form"
}
PUT /global/form/460
{
"KeyWords": "",
"OneLineDesc": "",
"Link": "",
"Title": "permissions test"
}
PUT /global/form/576
{
"KeyWords": "",
"OneLineDesc": "Test test test test test test test test",
"Link": "",
"Title": "My Test Form"
}
现在使用多重匹配同时搜索和增强:
POST /global/form/_search
{
"query": {
"multi_match": {
"query": "test",
"fields": ["Title^5", "_all"]
}
}
}
multi_match
允许您对多个字段使用匹配查询。在本例中,我们正在搜索标题
和\u全部
。Title
字段上的插入符号(^5
)为Title字段增加了5的提升值,这意味着Title
上的匹配项得分高于任何其他字段上的匹配项。这将扭曲搜索结果,使标题匹配显示在顶部
此外,默认情况下,multi_match
使用dis_max
查询,这是您想要的一般行为。通常,dis_max
支持在单个字段中进行匹配,而不是分散在多个字段中
例如,在标题字段中匹配
quick-fox
将比在标题和正文中匹配quick
得分更高。回答得好!谢谢