使用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将它们视为字母字符。
-
使用C#在其中具有空格和特殊字符的Elastic Search-Search字符串
2021-02-01 关注 0 浏览160 1答案
-
Elastic search 带空格的术语
2021-02-01 关注 0 浏览143 1答案
-
使用Rest High Level Client检索数据或将数据插入Elastic Search时发生SocketTimeoutException
2021-02-01 关注 0 浏览96 1答案
-
Elastic search和Codeigniter(PHP)
2021-02-01 关注 0 浏览139 1答案
-
使用Java自动完成,Redis,Elastic Search,Mongo
2021-02-01 关注 0 浏览173 1答案
-
Elastic search-search_after参数
2021-02-01 关注 0 浏览251 1答案
-
在Elastic Search中对数组元素进行查询字符串搜索
2021-02-01 关注 0 浏览107 1答案
-
Elastic search批量API,管道和Geo IP
2021-02-01 关注 0 浏览125 1答案
-
云中的Elastic search集群
2021-02-01 关注 0 浏览154 1答案
-
Elastic search-search_analyzer与index_analyzer
2021-02-01 关注 0 浏览235 1答案