【问题标题】:How to ignore URL when searching using ElasticSearch?使用 ElasticSearch 搜索时如何忽略 URL?
【发布时间】:2021-06-30 19:32:07
【问题描述】:

您好,我有一组文档,其中可能包含一些文本,但其中可能包含 URL:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tincidunt metus a convallis imperdiet. Praesent interdum magna ut lorem bibendum vehicula. Maecenas consectetur tortor a ex pulvinar, sit amet sollicitudin nunc maximus. Pellentesque non gravida ligula, imperdiet pharetra odio. Nunc non massa vitae mauris tempor tempus. Nulla ac laoreet tellus. Nulla consequat tortor eu eros euismod bibendum. Curabitur ante ligula, aliquet at lacus at, pretium convallis eros. Fusce id mi condimentum, tempor lorem ut, pharetra libero.

https://document.io/document/ipsum

In eget eleifend neque. Morbi ex leo, tincidunt non enim ut, rutrum suscipit metus. Cras laoreet ex ut massa consequat condimentum. Aenean finibus eu nisl ut rhoncus. Aliquam finibus nisl risus, id facilisis justo rutrum et. Aenean enim libero, commodo id mi ut, mattis sollicitudin tellus. Aliquam molestie ligula sit amet lorem malesuada, aliquet pretium dolor malesuada. Phasellus fringilla libero in sollicitudin tristique. Quisque molestie, enim et aliquam dapibus, ex erat ultrices nisi, luctus ornare lorem metus eu sapien.

我正在使用匹配查询来搜索文档中的单词,但是,正如您所看到的,有时 URL 中的单词也是实际文本的一部分。这弄乱了结果。我只是想知道 ElasticSearch 是否有办法让我简单地忽略 URL 并只关注文本?

我目前正在为该字段使用english 分析器。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以在分析器中使用Pattern replace character filter。要从文本中删除 URL,您可以将此过滤器添加到搜索分析器中:

    过滤器:

    "char_filter": {
        "type": "pattern_replace",
        "pattern": "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]",
              "replacement": ""
    }
    

    此过滤器会将 URL 替换为 empty string,因此您不会从 URL 匹配中获得结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2012-07-14
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      相关资源
      最近更新 更多