如何进行弹性搜索以在尖括号内返回结果?

时间:2016-02-29 23:11:06

标签: search elasticsearch analyzer

我是弹性搜索的新手。我正在尝试修复搜索,以便用户可以搜索html标记内的内容。目前,我们正在使用空格标记器,因为我们需要它来返回带连字符的名称的结果。因此,aname123-suffix project被编入索引为["aname123-suffix", "project"],用户搜索"aname123-*"会返回正确的结果。

我的问题出现了,因为我们也希望能够在html标签内搜索内容。因此,例如,对于名为<aname123>-suffix project的项目,我们希望能够输入搜索字词<aname123>-*并获得正确的结果。

索引具有空格标记器的正确标记,即["<aname123>-suffix", "project"],但当我的搜索字符串为"\<aname123\>\-suffix""\\<aname123\\>\\-suffix"时,弹性搜索不会返回任何结果。

我认为解决方案在于

  1. 修改搜索字符串,以便弹性搜索在我要求时返回<aname123>-suffix;或
  2. 能够将标记内的内容与空白标记分开编制索引,即["<aname123>-suffix", "project", "aname123", "suffix"]
  3. 到目前为止,我一直在通过更改索引来接近它,但我还没有成功。标准标记生成器将允许标记内容的搜索结果,但无法返回aname123-*的搜索结果。目前,我的分析仪设置如下所示:

    {  "analysis":
             { "analyzer":
                  { "my_whitespace_analyzer" :
                      {"type": "custom"
                            {"tokenizer": "whitespace},
                            {"filter": ["standard", "lowercase", "stop"]}
                      }
                  },
                  { "my_tag_analyzer":
                      {"type": "custom"
                            {"tokenizer": "standard"},
                            {"filter": ["standard", "lowercase", "stop"]}
                       }
                   }
               }
     }
    

    我可以创建一个自定义字符过滤器来去掉&lt;和&gt;,所以我的索引包含aname123;但由于某些原因,在<aname123>*上搜索时,弹性搜索仍然无法返回正确的结果。但是,当我使用标准分析器时,索引包含aname123 ,它返回<aname123>*的预期结果...弹性搜索中尖括号有什么特别之处?

1 个答案:

答案 0 :(得分:0)

您可能需要查看html_strip字符过滤器:

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-htmlstrip-charfilter.html

来自其中一位弹性搜索开发人员的例子是:

https://gist.github.com/clintongormley/780895