你这里有几个问题。首先,
mapping应该是
mappings,并且在声明映射时丢失了类型(因此您的类型
wat实际上根本没有获得该映射)。您可以使用此:
{ "mappings": { "wat": { "properties": { "text": { "type": "text", "analyzer": "my_analyzer" } } } }, "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "keyword", "char_filter": [ "my_char_filter" ] } }, "char_filter": { "my_char_filter": { "type": "html_strip" } } } }}您可以使用get mapping
API来确认您看到的映射类型符合
wat您的期望。
然后,如果您为索引
Hello <span>Freddy</span>并搜索
Hello Freddy,您将看到此结果。存储的术语是
HelloFreddy,但是您将
span在搜索结果中看到标记,因为结果返回的是源(您索引的值),而不是分析的术语。(如果您搜索
Hello<span>Freddy</span>,也会看到相同的结果,但这是因为查询文本的分析方式与索引文本的分析方式相同。)
请注意,由于您已使用了分
keyword词器,因此如果搜索
Hello或,将不会获得任何结果
Freddy。如果要在字符串中搜索,而不是搜索完整的字符串(或通配符,正则表达式等),则应使用其他令牌生成器(如
standard令牌生成器)。
另一个警告:
html_strip过滤器似乎仅过滤有效的html标签(因此不适用于
<PERSON>)。您可能可以改用模式过滤器。



