0

我想在产品代码中搜索 - 字符和数字的混合(例如:A210/444、、Alexx 1982 X...)。(顺便说一句:有没有人在这种类型的数据中搜索的一些最佳实践?)

我有一个索引index_analyzersearch_analyzer

{
    "settings": {
        "analysis": {
            "analyzer": {
                "index_analyzer": {
                    "tokenizer": "standard",
                    "filter": [
                        "standard",
                        "lowercase",
                        "asciifolding",
                        "custom_word_delimiter",
                        "custom_edgengram"
                    ]
                },
                "search_analyzer": {
                    "tokenizer": "standard",
                    "filter": [
                        "standard",
                        "asciifolding",
                        "custom_word_delimiter",
                        "lowercase"
                    ]
                }
            },
            "filter": {
                "custom_word_delimiter": {
                    "type": "word_delimiter",
                    "preserve_original": "true"
                },
                "custom_edgengram": {
                    "type": "edgeNGram",
                    "min_gram": "2",
                    "max_gram": "30"
                }
            }
        }
    }
}

问题在于自动输入。 index_analyzer没关系,所有值都是 word 类型。

curl -XGET 'http://localhost:9200/myindex/_analyze?analyzer=index_analyzer&pretty' -d 'Alexx 1982 X' | elasticat.rb

+---+------------+------+------+
| 1 | al         | 0–5  | word |
| 1 | ale        | 0–5  | word |
| 1 | alex       | 0–5  | word |
| 1 | alexx      | 0–5  | word |
| 2 | 19         | 6–10 | word |
| 2 | 198        | 6–10 | word |
| 2 | 1982       | 6–10 | word |
+---+------------+------+------+

但是,search_analyzer(没有 edgeNGram)...

curl -XGET 'http://localhost:9200/myindex/_analyze?analyzer=search_analyzer&pretty' -d 'Alexx 1982 X' | elasticat.rb
+---+------------+-------+------------+
| 1 | alexx      | 0–5   | <ALPHANUM> |
| 2 | 1982       | 6–10  | <NUM>      |
| 3 | x          | 11–12 | <ALPHANUM> |
+---+------------+-------+------------+

...识别1982为数字,这会在搜索中出现问题(使用_all占位符)。当我尝试仅搜索时,在搜索结果中没有命中1982

有什么方法可以强制只使用某些字符串类型吗?

感谢您的任何想法!

马丁

4

0 回答 0