Elasticsearch 阻止对 Markdown 超链接的索引

Posted

技术标签:

【中文标题】Elasticsearch 阻止对 Markdown 超链接的索引【英文标题】:Elasticsearch prevent indexing of Markdown hyperlinks 【发布时间】:2022-01-15 07:31:18 【问题描述】:

我正在使用 Elasticsearch 构建 Markdown 文件内容搜索。目前,MD 文件中的全部内容都在 Elasticsearch 中建立了索引。但问题是它显示了这样的结果[Mylink](https://link-url-here.org)[Mylink2](another_page.md) 在搜索结果中。

我想阻止超链接的索引和对其他页面的引用。当有人搜索“Mylink”时,它应该只返回没有 URL 的文本。如果有人能帮助我找到正确的解决方案,那就太好了。

【问题讨论】:

【参考方案1】:

您可以使用带有script processor 的摄取管道来提取链接文本:

1.设置管道

PUT _ingest/pipeline/clean_links

  "description": "...",
  "processors": [
    
      "script": 
        "source": """
          if (ctx["content"] == null) 
            // nothing to do here
            return
          
          
          def content = ctx["content"];
          
          Pattern pattern = /\[([^\]\[]+)\](\(((?:[^\()]+)+)\))/;
          Matcher matcher = pattern.matcher(content);
          def purged_content = matcher.replaceAll("$1");
          
          ctx["purged_content"] = purged_content;
        """
      
    
  ]

正则表达式可以是tested here,灵感来自this。

2。在提取文档时包含管道

POST my-index/_doc?pipeline=clean_links

  "content": "[Mylink](https://link-url-here.org) [anotherLink](http://dot.com)"


POST my-index/_doc?pipeline=clean_links

  "content": "[Mylink2](another_page.md)"

python 文档are here.

3.验证

GET my-index/_search?filter_path=hits.hits._source

应该让步


  "hits" : 
    "hits" : [
      
        "_source" : 
          "purged_content" : "Mylink anotherLink",
          "content" : "[Mylink](https://link-url-here.org) [anotherLink](http://dot.com)"
        
      ,
      
        "_source" : 
          "purged_content" : "Mylink2",
          "content" : "[Mylink2](another_page.md)"
        
      
    ]
  


如果您想从您的_source 中完全丢弃它们,您可以替换原来的content

相比之下,您可以在另一个方向更进一步,将文本 + 链接对存储在表单的嵌套字段中:


  "content": "...",
  "links": [
    
      "text": "Mylink",
      "href": "https://link-url-here.org"
    ,
    ...
  ]

这样当您以后决定将它们设为可搜索时,您就可以精确地做到这一点。


无耻插件:您可以在我的Elasticsearch Handbook 中找到其他动手摄取指南。

【讨论】:

【参考方案2】:

我认为你有两个主要的解决方案来解决这个问题。 首先:清理源代码中的数据,然后再将其索引到 Elasticsearch 中。 第二:使用 Elasticsearch 过滤器为您清理数据。 第一个解决方案很简单,但如果您需要在 Elasticsearch 中执行此过程,您需要创建一个 ingest pipeline。

然后您可以使用Script processor 通过可以找到您的正则表达式并将其删除的 ruby​​ 脚本来清理您需要的数据

【讨论】:

【参考方案3】:

您需要在索引应用程序中呈现 Markdown,然后删除 html 标记并将其与 markdown 源一起保存。

【讨论】:

以上是关于Elasticsearch 阻止对 Markdown 超链接的索引的主要内容,如果未能解决你的问题,请参考以下文章

Markdow常用基础语法

vscode编辑器markdow文档导出为pdf

vscode编辑器markdow文档导出为pdf

Markdow流程图制作教程

优化 Elasticsearch 索引

Elasticsearch es Bootstrap Checks Failed