elasticsearch - _all上的 Elasticsearch edge_ngram匹配查询被忽略

标签 elasticsearch autocomplete

我正在使用 flex 搜索number: "1.5.2",并且正在尝试实现edge_ngram自动完成搜索。我有以下映射:

curl -XPUT 'localhost:8080/users' -d '{
    "settings": {
        "analysis": {
            "filter": {
                "edge_ngram_filter": {
                    "type": "edge_ngram",
                    "min_gram": 2,
                    "max_gram": 10
                }
            },
            "analyzer": {
                "edge_ngram_analyzer": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "asciifolding",
                        "edge_ngram_filter"
                    ]
                },
                "whitespace_analyzer": {
                    "type": "custom",
                    "tokenizer": "whitespace",
                    "filter": [
                        "lowercase",
                        "asciifolding"
                    ]
                }
            }
        },
        "mappings": {
            "user": {
                "_all": {
                    "type":"string",
                    "index_analyzer": "edge_ngram_analyzer",
                    "search_analyzer": "whitespace_analyzer"
                },
                "properties": {
                    "id":{
                        "type": "integer",
                        "index": "no",
                        "include_in_all":false
                    },
                    "email": {
                        "type": "string"
                    },
                    "firstName": {
                        "type": "string"
                    },
                    "lastName": {
                        "type": "string"
                    }
                }
            }
        }
    }
}'


然后,我为“用户”文档建立索引:

curl -XPUT 'localhost:8080/users/user/1' -d '{
    "email": "a.smith@gmail.com",
    "firstName": "Alexander",
    "lastName": "Smith"
}'


当我运行以下查询时,不会返回任何内容:

curl -XGET 'localhost:8080/users/_search' -d '{
    "query": {
        "match":{
            "_all":{
                "query": "ale",
                "operator":"and"
            }
        }
    }
}'


为什么_all匹配查询在用户文档上不匹配?

最佳答案

您可以通过edge_ngram实现自动完成功能,而无需覆盖_all字段分析。这可以通过将已定义的分析器的名称更改为default_indexdefault_search(如果需要,可以alias反射(reflect)原始名称(“edge_ngram_analyzer”和“whitespace_analyzer”))来完成。这是带有相关更改的配置:

curl -XPUT 'localhost:8080/users' -d '{
    "settings": {
        "analysis": {
            "filter": {
                "edge_ngram_filter": {
                    "type": "edge_ngram",
                    "min_gram": 2,
                    "max_gram": 10
                }
            },
            "analyzer": {
                "default_index": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "asciifolding",
                        "edge_ngram_filter"
                    ]
                },
                "default_search": {
                    "type": "custom",
                    "tokenizer": "whitespace",
                    "filter": [
                        "lowercase",
                        "asciifolding"
                    ]
                }
            }
        },
        "mappings": {
            "user": {
                "properties": {
                    "id":{
                        "type": "integer",
                        "index": "no",
                        "include_in_all":false
                    },
                    "email": {
                        "type": "string"
                    },
                    "firstName": {
                        "type": "string"
                    },
                    "lastName": {
                        "type": "string"
                    }
                }
            }
        }
    }
}'


希望我能帮助到我:)

关于elasticsearch - _all上的 Elasticsearch edge_ngram匹配查询被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37082797/

相关文章:

search - Elasticsearch中的I18n搜索和过滤

mysql - 设置Kafka连接器管道时出错

jQuery:我使用什么监听器来检查浏览器自动填充密码输入字段?

java - 如何允许编辑文本中包含特定字符串并向用户显示这些字符串?

mongodb - Geonear 和多个 2dsphere 索引

elasticsearch - ElasticSearch和数组搜索

symfony - 如何使用ElasticSearch仅搜索嵌套对象数组中的第一个对象

csv - 将CSV文件传递到elastic + kibana时弄乱了字段

java - 插入/使用 CompletionProposal 的 eclipse 插件扩展点

javascript - 如何重定向自动完成搜索框以显示 View