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 超链接的索引的主要内容,如果未能解决你的问题,请参考以下文章