gpt4 book ai didi

json - 对多个领域进行 Elasticsearch

转载 作者:行者123 更新时间:2023-12-02 23:31:26 26 4
gpt4 key购买 nike

我想在具有几个字段的文档中搜索关键字。
搜索仅在两个字段上进行:id和name。

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

例如,如果我有这两条记录:
1. id:5名称:“kuku”
2. id:10名称:“kuku523”

并且我在搜索“5”作为关键字时,应该为第一条记录(在匹配列表中)获得更高的分数。

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

我一直在尝试使用matchQuery,multiMatchQuery和FuzzyLikeThis。

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

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

和FuzzyLike这将引发有关数字字段的异常。
setQuery(QueryBuilders.fuzzyLikeThisQuery(ID,NAME).likeText(searchParam))

tremQuery并没有真正提供解决方案。

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

最佳答案

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

要么

如果您仍然需要id字段作为数字来进行术语查询,则可以使用多字段
创建一个多字段,其中将包含一个数字字段以及一个用于搜索的字符串

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

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

关于json - 对多个领域进行 Elasticsearch ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36010007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com