"users" "type" => "user" "body" => arra-6ren">
gpt4 book ai didi

php - Elasticsearch 空间

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

我有一个Elasticsearch设置,它将允许用户搜索通配符作为索引。

array:3 [
"index" => "users"
"type" => "user"
"body" => array:4 [
"from" => 0
"size" => 25
"sort" => array:1 [
1 => array:1 [
"order" => "asc"
]
]
"query" => array:1 [
"bool" => array:1 [
"should" => array:1 [
0 => array:1 [
0 => array:1 [
"wildcard" => array:1 [
"full_name" => "john doe"
]
]
]
]
]
]
]
]

当我将此数组传递给搜索功能时,它将返回一个空数组。但是有一个与“John Doe”有关的文档,当我运行 "full_name" => "john"时,搜索将返回该文档。

我觉得问题出在空间上。
{
"users": {
"user": {
"properties": {

"address": {
"type": "string"
},
"full_name": {
"type": "string"
},
"industry_name": {
"type": "string"
}
}
}

}
}

最佳答案

假设字段full_name通过elasticsearch分析。

您遇到的问题是wildcard query无法分析搜索字符串的事实

Matches documents that have fields matching a wildcard expression (not analyzed).



在您的情况下,这意味着Elasticsearch在反向索引中存储了 johndoe token ,但是通配符查询正在搜索 john doe token ,但失败。

您可以对此做些什么:
  • 更改索引映射,因此不再分析full_name字段。
    注意:您必须搜索John Doe以获得匹配,因为
    值未分析,因此john doe不匹配。
  • 您可以通过保留full_name来改善第一个解决方案
    分析,但使用自定义分析器(通配符,小写)。它会
    允许您搜索文本john doeJohn Doe
    {
    "settings" : {
    "index" : {
    "analysis" : {
    "analyzer" : {
    "lowercase_analyzer" : {
    "tokenizer" : "keyword",
    "filter" : [
    "lowercase"
    ],
    "type" : "custom"
    }
    }
    }
    }
    },
    "mappings" : {
    "user" : {
    "properties" : {
    "id" : {
    "type" : "integer"
    },
    "fullName" : {
    "analyzer" : "lowercase_analyzer",
    "type" : "string"
    }
    }
    }
    }
    }
  • 您可以利用multi field并针对raw搜索
    Realm 。
    "full_name.raw" => "John Doe"

  • 希望它可以帮助您处理用例。

    更新

    Here您可以找到更多有关如何控制索引映射的信息。

    关于php - Elasticsearch 空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002772/

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