Node.js 在Elasticsearch中搜索时考虑多个字段
我想使用Elasticsearch实现一个简单的搜索查询 我有两个字段,Node.js 在Elasticsearch中搜索时考虑多个字段,node.js,
elasticsearch,Node.js,
elasticsearch,我想使用Elasticsearch实现一个简单的搜索查询 我有两个字段,“title”和“description”,我想将搜索的词与之匹配。目前,我的身体如下所示,作为搜索身体的身体。如何使搜索对标题匹配项进行优先级排序,但如果说明中存在匹配项,它们仍会包含在搜索中(优先级较低)?提前谢谢 body = { size: 200, from: 0, query: { prefix: { title: searchTerm } } }
“title”
和“description”
,我想将搜索的词与之匹配。目前,我的身体如下所示,作为搜索身体的身体。如何使搜索对标题
匹配项进行优先级排序,但如果说明
中存在匹配项,它们仍会包含在搜索中(优先级较低)?提前谢谢
body = {
size: 200,
from: 0,
query: {
prefix: {
title: searchTerm
}
}
}
可以将子句与参数一起使用
{
"query": {
"bool": {
"should": [
{
"prefix": {
"title": {
"value": "searchterm"
}
}
},
{
"prefix": {
"description": {
"value": "searchterm",
"boost": 4
}
}
}
]
}
}
}
可以将子句与参数一起使用
{
"query": {
"bool": {
"should": [
{
"prefix": {
"title": {
"value": "searchterm"
}
}
},
{
"prefix": {
"description": {
"value": "searchterm",
"boost": 4
}
}
}
]
}
}
}
对于“其他”字段,必须使用分数为0的查询。任何其他增强/功能评分使用都不会可靠地对某个字段进行评分,因为评分基于其他参数,如文本长度。例如,这意味着持续增强(除非非常大)无法保证您所寻求的行为
通过为每个字段使用恒定分数,您可以手动控制分数,如下所示:
{
size: 200,
from: 0,
query: {
bool: {
should: [
{
prefix: {
title: searchTerm
}
},
{
constant_score: {
filter: {
prefix: {
description: searchTerm
}
},
boost: 0
}
},
]
}
}
}
如果将description
boost设置为大于0,则分数将是两个字段的综合分数,通过这样做,您可以将两个字段中都有前缀的文档优先于仅在标题字段中有前缀的文档。您必须使用分数为0的查询来查询“其他”字段。任何其他增强/功能评分使用都不会可靠地对某个字段进行评分,因为评分基于其他参数,如文本长度。例如,这意味着持续增强(除非非常大)无法保证您所寻求的行为
通过为每个字段使用恒定分数,您可以手动控制分数,如下所示:
{
size: 200,
from: 0,
query: {
bool: {
should: [
{
prefix: {
title: searchTerm
}
},
{
constant_score: {
filter: {
prefix: {
description: searchTerm
}
},
boost: 0
}
},
]
}
}
}
如果将description
boost设置为大于0,则分数将是两个字段的综合分数,通过这样做,您可以将两个字段中都有前缀的文档优先于仅在title
字段中有前缀的文档。关于简单的增强用法,例如description=prefix
可以优先于title=。。。大量文本。。。前缀更多文本
。如果可以假设影响评分的因素在字段之间可以忽略不计(即某些长度限制等),我建议阅读然后,您可以使用一种简单的boost方法,使用某种阈值作为可靠的boost。例如,对于简单的boost用法,description=prefix
可以优先于title=。。。大量文本。。。前缀更多文本
。我建议阅读以下内容,如果您可以假设影响评分的因素在字段之间可以忽略不计(即某些长度限制等),那么您可以使用简单的boost方法,并使用某种阈值作为boost。