gpt4 book ai didi

elasticsearch - 如何对两种不同的数据类型执行搜索查询?

转载 作者:行者123 更新时间:2023-12-03 01:37:06 26 4
gpt4 key购买 nike

我的查询非常简单,为了使其更简单,可以说我仅在两个字段(名称(文本)和年龄(长))上进行搜索:

GET person_db/person/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase_prefix": {
"name": "hank"
}
},
{
"match_phrase_prefix": {
"age": "hank"
}
}
],
"minimum_should_match": 1,
"boost": 1.0
}
}
}

如果我搜索“23”,没问题,elastic知道如何将其更改为数字,并且不会失败,但是如果搜索输入是“john”,则会收到错误400 "reason": "failed to create query: {\n \"bool\...."

在这种情况下我该怎么办?

我曾想过在插入到es之前将数字值更改为字符串,但是为了避免这种情况,我认为es应该有一种方法来支持它。

欣赏它

此查询有效:(感谢@jmlw)
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "alt",
"type": "phrase_prefix",
"fields": [
"name",
"taxid",
"providers.providerAddress.street"
],
"lenient": true
}
}
],
"minimum_should_match": 1,
"boost": 1.0
}
}
}

最佳答案

没有您的文档或映射的详细信息,我的第一个猜测是age字段被Elasticsearch解释为数字字段。传递除“数字”类型以外的任何内容或可以转换为数字的内容都会导致查询失败,但有些异常(exception)会报告将字符串转换为数字失败。

如此说来,您可以尝试将lenient: true添加到match_phrase_prefix搜索词中,这将使Elasticsearch忽略将转换为数字类型的失败,并将其从搜索中删除。

另一种方法是只允许用户在相同类型的多个字段上查询,或指定他们要在哪个字段中查询哪些数据。即我是用户,我想搜索age为23并拥有name John的用户,而不是键入23 John或类似名称。

否则,您可能需要预处理查询字符串,并拆分搜索词,然后使用lenient: true将它们分别传递到搜索子句中,以尝试在具有不同数据类型的多个字段中搜索多个词。

您也可以尝试使用其他搜索类型,例如multi_matchquery_stringsimple_query_string,因为这些搜索类型可能会更灵活地满足您的需求。

关于elasticsearch - 如何对两种不同的数据类型执行搜索查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559641/

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