我想在包含几个字段的文档中搜索关键字。 搜索应仅在两个字段上进行:id和name。
我需要编写一个具有以下属性的查询: 如果您的搜索输入(关键字)是数字,并且在ID字段和名称字段中有两个不同的记录包含此关键字,则应首先显示具有id字段的记录(它不必是ID字段中的完美匹配)。
例如,如果我有这两个记录: 1. id:5名称:" kuku" 2. id:10名称:" kuku523"
我寻找" 5"作为关键字,我应该获得第一条记录的更高分数(在点击列表中)。
" id"字段是数字,"名称" field是一个字符串。
我一直在尝试使用matchQuery,multiMatchQuery和fuzzyLikeThis。
multiMatchQuery为第二个记录而不是第一个记录提供了更高的分数,这对我来说看起来很奇怪(因为在第一条记录上有一个"完美匹配")。
setQuery(QueryBuilders.multiMatchQuery(searchParam, ID, NAME));
和fuzzyLike这引发了关于数字字段的异常。
setQuery(QueryBuilders.fuzzyLikeThisQuery(ID,NAME).likeText(searchParam))
tremQuery并没有真正提供解决方案。
我应该在这样的情况下使用什么查询?
答案 0 :(得分:1)
您需要将id
设为String
字段,因为全文搜索不适用于数字字段。
OR
如果您仍需要id
字段作为术语查询的数字,则可以使用多字段
创建一个多字段,其中包含一个数字字段以及一个用于搜索的字符串
PUT /test/items/_mapping
{
"items" : {
"properties" : {
"id" : {
"fields" : {
"numeric" : {
"type" : "integer",
"index" : "not_analyzed"
},
"text" : {
"type" : "string",
"index" : "analyzed"
}
}
}
}
}
}
现在,您可以使用id.numeric
进行数字查询,使用id.text
进行文字查询