繁体   English   中英

对多个字段进行弹性搜索

[英]elasticsearch upon multiple fields

我想在具有几个字段的文档中搜索关键字。 搜索应该只发生在两个字段上:id 和 name。

我需要编写一个具有此属性的查询:如果您的搜索输入(关键字)是数字,并且恰好有两个不同的记录在 id 字段和 name 字段中包含此关键字,则应显示带有 id 字段的记录首先(它不必是 ID 字段中的完美匹配)。

例如,如果我有这两条记录: 1. id: 5 name:"kuku" 2. id: 10 name: "kuku523"

我寻找“5”作为关键字,我应该为第一条记录(在命中列表中)获得更高的分数。

“id”字段是数字,“name”字段是字符串。

我一直在尝试使用matchQuery、multiMatchQuery 和fuzzyLikeThis。

multiMatchQuery 给第二条记录而不是第一条记录提供更高的分数,这对我来说看起来很奇怪(因为第一条记录上有一个“完美匹配”)。

setQuery(QueryBuilders.multiMatchQuery(searchParam, ID, NAME));

而fuzzyLike This 会引发关于数字字段的异常。

setQuery(QueryBuilders.fuzzyLikeThisQuery(ID,NAME).likeText(searchParam))

tremQuery 并没有真正给出解决方案。

在这种情况下我应该使用什么查询?

您需要将id设为String字段,因为全文搜索不适用于数字字段。

或者

如果您仍然需要id字段作为术语查询的数字,您可以使用 multifields 创建一个多字段,它将包含一个数字字段和一个用于搜索的字符串

PUT /test/items/_mapping
{
  "items" : {
    "properties" : {
      "id" : {
          "fields" : {
            "numeric" : {
              "type" : "integer",
              "index" : "not_analyzed"
            },
            "text" : {
              "type" : "string",
              "index" : "analyzed"
            }
          }
        }
      }
    }
}

现在,您可以使用id.numeric进行数字查询,使用id.text进行文本查询

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM