【发布时间】: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 将其转换为纯文本,然后对其进行索引。
- 我应该创建一个
custom analyzer来将markdown文档保存到plain text吗?还是需要custom query parser? - 谁能给出相同的代码示例(伪代码也可以)。
请帮忙。
【问题讨论】:
-
我看不出为什么 StandardTokenizer 不能为您提供适当的无 Markdown 标记(因为它会拆分并丢弃大多数非字母数字字符)。它在 markdown 语法的哪一部分上吐槽?
-
@MatsLindh,我发现了问题所在。我只使用
WhiteSpaceAnalyzer。WhiteSpaceAnalyzer只是基于空格进行标记,而不是基于降价中的 * 或 ## 等特殊字符。我看到对于我的用例 -StandardTokenizerFactory是完美的 - 因为分词器会在空格以及您提到的非字母数字字符上中断。我已完成此更改 - 现在搜索按预期工作。
标签: solr full-text-search markdown apache-tika full-text-indexing