使用Elastic Search检索标签内容和带连字符的单词

发布于 2021-02-01 11:44:24

我们在应用程序中使用弹性分析器配置了elasticsearch。这些单词在空白处被标记,因此名称如 _<fantastic> project_被索引为

["<fantastic>", "project"]

并且 ABC-123-def项目 的索引为

["ABC-123-def", "project"]

然后,当我们搜索ABC- *时,预期的项目就会出现。但是,如果我们专门搜索<fantastic>它根本不会出现。好像Lucene / Elastic
Search会忽略任何包含尖括号的搜索词。但是,即使单词未与尖括号分开索引,我们 也可以
搜索fantastic,或<*fantastic**fantastic*,它将很好。

标准分析器标记任何非字母数字字符。 _<fantatsic>_项目被索引为

["fantastic", "project"]

并且 ABC-123-def 项目的索引为

["ABC", "123", "def", "project"]

这会破坏使用进行成功搜索的能力ABC-123-*。但是,我们使用标准分析仪得到的是有人可以专门搜索<fantastic>并返回所需的结果。

如果不是一个标准的分析器我们一个char_filter添加到空白分析仪,过滤出在标签上的角撑架,(替换<(.*)>$1),它会被因而索引:
_<fantatsic> project_被索引为

["fantastic", "project"]

(无尖括号)。和 ABC-123的高清项目 的索引为

["ABC-123-def", "project"]

它看起来很有希望,但是最终得到的结果与普通空白分析器的结果相同:当专门搜索时<fantastic>,虽然什么也没得到,但是*fantastic*效果很好。

堆栈溢出的任何人都可以解释这种怪异吗?

关注者
0
被浏览
229
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    您可以为特殊字符创建令牌生成器,请参见以下示例

    {
        "settings" : {
            "index" : {
                "number_of_shards" : 1,
                "number_of_replicas" : 1
            },  
            "analysis" : {
                "filter" : {
                    "custom_filter" : {
                        "type" : "word_delimiter",
                        "type_table": ["> => ALPHA", "< => ALPHA"]
                    }   
                },
                "analyzer" : {
                    "custom_analyzer" : {
                        "type" : "custom",
                        "tokenizer" : "whitespace",
                        "filter" : ["lowercase", "custom_filter"]
                    }
                }
            }
        },
        "mappings" : {
            "my_type" : {
                "properties" : {
                    "msg" : {
                        "type" : "string",
                        "analyzer" : "custom_analyzer"
                    }
                }
            }
        }
    }
    

    < >作为ALPHA字符,导致基础的word_delimiter将它们视为字母字符。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看