php - 不区分大小写的搜索不起作用

标签 php elasticsearch

考虑这是我的映射和设置

$arr = [
        'index' => 'test1',
        'body' => [
            'settings' => [
               'analysis' => [
                    'analyzer' => [
                            'name_analyzer' => [
                            'type' => 'custom',
                            'tokenizer' => 'standard',
                            'filter' => [
                              'lowercase',
                              'asciifolding',
                              'word_delimiter'
                            ]
                        ]
                    ]
                ]
            ],
            "mappings" => [
                "info" => [
                    "properties" => [
                        "Name" => [
                            "type" => "string",
                            "index" => "analyzed",
                            "analyzer" => "name_analyzer"
                        ],
                        "Address" => [
                            "type" => "string",
                            "index" => "analyzed",
                            "analyzer" => "name_analyzer"
                        ]
                    ]
                ]
            ]
        ]
    ];

在索引两个名称和地址之后
  • abc some_address1
  • Abc some_address2

  • 当我搜索名称“A”时,结果没有任何文档。
    但是当我搜索名称“a”时,结果中同时显示了两个文档

    所以我的问题是,即使我已经设置了分析器,为什么我的搜索也不区分大小写?

    我的搜索查询
    $query['index'] = 'test1';
        $query['type']  = 'info';
        $query['body'] = [
            'query'=> [
                'bool' => [
                    'should' => [
                        [
                            'prefix' => [
                                'Name' => 'a'
                            ]
                        ]
                    ]
                ]
            ]
        ];
    

    最佳答案

    您正在使用prefix query,正如文档所说,在查询时不会分析前缀。这意味着,如果您将A用作前缀,则将不匹配任何内容,因为Name字段是小写的。

    因此,如果您要继续使用前缀查询,建议您手动将前缀小写。

    如果这不是一个选项,则可以按如下所示使用带通配符的query string:

    $query['index'] = 'test1';
        $query['type']  = 'info';
        $query['body'] = [
            'query'=> [
                'bool' => [
                    'should' => [
                        [
                            'query_string' => [
                                'default_field' => 'Name',
                                'query' => 'A*',
                                'analyze_wildcard' => 'true'
                            ]
                        ]
                    ]
                ]
            ]
        ];
    

    关于php - 不区分大小写的搜索不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672556/

    相关文章:

    elasticsearch - Elasticsearch按字段前缀聚合

    elasticsearch - Elasticsearch。嵌套字段类型和原始字符串子字段

    PHP复选框问题

    php - 如何将数组放入文件?

    java - Elasticsearch-6.6.0 无法在 Windows 上启动

    elasticsearch - 如何删除整个Elasticsearch数据库并重新发送所有日志?

    java - 通过 JDBC River 自动更新 Elastic Search 中的索引

    php - Mysql更新字段与其他字段

    javascript - 如何通过代码更改 paypal 按钮上的重定向页面

    php - Wkhtmltopdf - 设置页脚字体的工作人员