【问题标题】:Indexing markdown documents for full text search in Apache SOLR在 Apache SOLR 中为全文搜索索引 markdown 文档
【发布时间】:2018-09-30 14:36:37
【问题描述】:



我正在使用 Apache SOLR 来索引 markdown 文档。
如您所知,Markdown 基本上是带有特殊标签的纯文本格式,例如粗体和斜体。 问题是:如果 markdown 具有粗体或斜体格式,则全文搜索不起作用。但是,如果降价文档没有格式元素(粗体、斜体或标题、链接等) - 全文搜索有效。总结一下,当markdown文档与纯文本相同时(即没有任何单词有任何markdown格式)。

我已经得出结论,我需要在索引文档之前将 markdown 转换为纯文本。只有这样,全文搜索才能在所有情况下按预期工作。

我在不同的在线论坛上进行了一些搜索和阅读。我想我需要实现一个自定义分析器。自定义分析器需要先将markdown转为明文,然后再进行索引。 我认为这种情况类似于Apache Tika 对微软文档所做的事情。它解析 ms office 文档并提取纯文本。 我想我需要类似的东西。
我也认为降价文档 - 我需要解析并转换为纯文本。
我已经找到了一种将 Markdown 转换为纯文本的方法。

但是,我不确定是否真的需要创建自定义分析器。我阅读了一些自定义分析器的代码——但它们都使用tokenFilters。据我了解,tokenFilters 在逐个令牌的基础上对流进行操作。就我而言,整个markdown 语料库必须转换为plain text。因此,请为此提出一种方法。

我想到的另一种方法是首先将降价转换为明文,然后将明文与降价一起保存到磁盘。但是,我想避免这种情况并在 SOLR 中处理它。我希望 SOLR 将其转换为纯文本,然后对其进行索引。

  1. 我应该创建一个custom analyzer 来将markdown 文档保存到plain text 吗?还是需要custom query parser
  2. 谁能给出相同的代码示例(伪代码也可以)。

请帮忙。

【问题讨论】:

  • 我看不出为什么 StandardTokenizer 不能为您提供适当的无 Markdown 标记(因为它会拆分并丢弃大多数非字母数字字符)。它在 markdown 语法的哪一部分上吐槽?
  • @MatsLindh,我发现了问题所在。我只使用WhiteSpaceAnalyzerWhiteSpaceAnalyzer 只是基于空格进行标记,而不是基于降价中的 * 或 ## 等特殊字符。我看到对于我的用例 - StandardTokenizerFactory 是完美的 - 因为分词器会在空格以及您提到的非字母数字字符上中断。我已完成此更改 - 现在搜索按预期工作。

标签: solr full-text-search markdown apache-tika full-text-indexing


【解决方案1】:

Use a StandardTokenizer - 它将拆分为大多数非数字字符,这应该适合将 Markdown 索引为单个术语,而不是保持 Markdown 语法不变。

此标记器将文本字段拆分为标记,将空格和标点符号视为分隔符。分隔符将被丢弃,但以下情况除外:

后面没有空格的句点(点)作为令牌的一部分保留,包括互联网域名。

“@”字符是一组标记拆分标点符号之一,因此电子邮件地址不会保留为单个标记。

如果您还想在单词之间划分句点,您可以使用PatternReplaceCharFilterFactory 在单词后面插入一个空格,用点分隔,不带空格。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多