使用Elastic Search检索标签内容和带连字符的单词
我们在应用程序中使用弹性分析器配置了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*
效果很好。
堆栈溢出的任何人都可以解释这种怪异吗?
回答:
您可以为特殊字符创建令牌生成器,请参见以下示例
{ "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将它们视为字母字符。
以上是 使用Elastic Search检索标签内容和带连字符的单词 的全部内容, 来源链接: utcz.com/qa/407468.html