在弹性搜索中对关键字进行规范化时保留空格

时间:2017-10-05 22:07:53

标签: elasticsearch mapping querydsl

我有以下模板将我的关键字转换为小写。当我搜索单MinnesotaDallas等单词关键字时,搜索结果是准确的。

但是,任何带有空格的内容都会返回不准确的结果。如果我尝试搜索“North Texas”,我希望搜索返回包含“North Texas”的所有文档。

我认为关键字标记器会根据空白将两个单词分成一个单词。如何在使用normalizers时保留空白?

{
    "template": "myTemplate_*",
    "settings": {
        "index": {
            "refresh_interval": "15s",
            "translog": {
                "durability": "async"
            }
        },
        "analysis": {
            "filter": {
                "word_joiner": {
                    "type": "word_delimiter",
                    "preserve_original": true
                }
            },
            "tokenizer": {
                "queryparam_tokenizer": {
                    "type": "pattern",
                    "pattern": "&"
                }
            },
            "normalizer": {
                "normalizer_keyword": {
                    "type": "custom",
                    "filter": [
                        "lowercase",
                        "asciifolding",
                        "word_joiner"
                    ]
                }
            }
        }
    },
    "mappings": {
        "_default_": {
            "_all": {
                "enabled": false
            }
        },
        "account": {
            "dynamic": "false",
            "properties": {
                "city": {
                    "type": "keyword",
                    "null_value": " Null",
                    "normalizer": "normalizer_keyword"
                },
                "state": {
                    "type": "keyword",
                    "null_value": " Null",
                    "normalizer": "normalizer_keyword"
                },
                "region": {
                    "type": "keyword",
                    "null_value": " Null",
                    "normalizer": "normalizer_keyword"
                },
                "area": {
                    "type": "keyword",
                    "null_value": " Null",
                    "normalizer": "normalizer_keyword"
                }
            }
        }
    }
}

我甚至尝试添加一个word_delimeter过滤器,preserve_original设置为true,这会让我错误。

"type":"illegal_argument_exception","reason":"Custom normalizer [normalizer_keyword] may not use filter [word_joiner]"},"status":400}

注意:我正在使用query_string在ES中执行通配符匹配。

0 个答案:

没有答案