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

出现我的问题是因为我们还希望能够搜索html标记内的内容。因此,例如对于一个名为<aname123>-suffix project的项目,我们希望能够输入搜索词<aname123>-*并获取正确的结果。

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

我认为解决方案在于

  • 修改搜索字符串,以便 flex 搜索在我要求时返回<aname123>-suffix;或
  • 能够将标签内的内容与空白标记分开索引,即["<aname123>-suffix", "project", "aname123", "suffix"]

  • 到目前为止,我一直在通过更改索引来实现这一目标,但尚未成功。标准 token 生成器将允许在标签内搜索内容的结果,但是无法返回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"]}
                       }
                   }
               }
     }
    

    我可以创建一个自定义的char过滤器,以除去,因此索引包含aname123;但是由于某种原因,在<aname123>*上进行搜索时, flex 搜索仍然无法返回正确的结果。但是,当我改用标准分析器时,索引包含aname123并返回<aname123>*的预期结果... flex 搜索中的尖括号有什么特别之处?

    最佳答案

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

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

    来自其中一名Elasticsearch开发人员的示例如下:

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

    10-02 13:19