首页 文章

elasticsearch search_analyzer没有应用过滤器

提问于
浏览
0

我无法让search_analyzer按预期工作 . 我希望它将指定的分析器应用于输入的搜索字符串,然后进行搜索 .

我将索引分析器设置为 ngram tokenizer ,其中包含l owercase filterchar replacement (- to _)

然后我想要搜索分析器 lowercasereplace (- to _) .

示例文档:{“filename”:“AAA-BBB”}

应匹配的示例搜索:{“match”:“AAA-b”}

相反,我必须搜索使用:{“match”:“aaa_b”}

elasticsearch版本:5.5

制图:

{
    "settings": {
        "analysis": {
            "tokenizer": {
                "DO_tokenizer_ngram": {
                    "type": "ngram",
                    "min_gram": 2,
                    "max_gram": 30
                }
            },
            "analyzer": {
                "DO_analyzer_ngram": {
                    "tokenizer": "DO_tokenizer_ngram",
                    "char_filter": [
                        "do_char_filter_dashes"
                    ],
                    "filter": [
                        "lowercase"
                    ]
                },
                "DO_analyzer_search": {
                    "type": "keyword",
                    "char_filter": [
                        "do_char_filter_dashes"
                    ],
                    "filter": [
                        "lowercase"
                    ]
                }
            },
            "char_filter": {
                "do_char_filter_dashes": {
                    "type": "pattern_replace",
                    "pattern": "(\\d+)-(?=\\d)",
                    "replacement": "$1_"
                }
            }
        }
    },
    "mappings": {
        "images": {
            "properties": {
                "filename": {
                    "type": "text",
                    "analyzer": "DO_analyzer_ngram",
                    "search_analyzer": "DO_analyzer_search"
                }
            }
        }
    }
}

1 回答

  • 0

    我是个白痴 . 搜索分析器需要:

    "tokenizer": "keyword"
    

    代替

    "type": "keyword",
    

相关问题