我有一个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无法分析搜索字符串的事实



在您的情况下,这意味着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/

    10-13 07:48