[英]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.