Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Elasticsearch中搜索时考虑多个字段_Node.js_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Node.js,elasticsearch" /> elasticsearch,Node.js,elasticsearch" />

Node.js 在Elasticsearch中搜索时考虑多个字段

Node.js 在Elasticsearch中搜索时考虑多个字段,node.js,elasticsearch,Node.js,elasticsearch,我想使用Elasticsearch实现一个简单的搜索查询 我有两个字段,“title”和“description”,我想将搜索的词与之匹配。目前,我的身体如下所示,作为搜索身体的身体。如何使搜索对标题匹配项进行优先级排序,但如果说明中存在匹配项,它们仍会包含在搜索中(优先级较低)?提前谢谢 body = { size: 200, from: 0, query: { prefix: { title: searchTerm } } }

我想使用Elasticsearch实现一个简单的搜索查询

我有两个字段,
“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。