我所说的自定义解析阶段发生在一些与Solr无关的程序中,甚至在Solr标记器可以对其进行处理之前。如果我解析数据,比如空格、制表符和其他不可打印的字符,那么当这些数据实际到达Solr master进行索引时,Solr标记器如何区分以前由空格或制表符或其他不可打印字符分隔的单独单词?
预处理器的示例代码和输出:
<?php$text = '<div>This is a sample text to be indexed</div>';
//Remove HTML tags
$text_refined1 = strip_tags($text);
//Remove non-printable unicode characters
$text_refined2 = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]/u', '', $text_refined1);
//Remove line feeds, carriage returns and tabs
$text_refined3 = preg_replace('/\s+/', '', $text_refined2);
echo $text_refined3;-输出
这是要索引的样本
发布于 2015-11-07 07:47:02
基于你给出的例子。例如,当输出示例被索引时,Solr现有的查询分析器将无法正确地对其进行标记化。
Solr(Lucene)需要一些方法将单个单词从输入中分离出来。
您可以使用solr的分析管理UI通过不同的分析器来测试这个字符串。在我的solr测试实例中,它们都返回原始字符串。
发布于 2015-11-07 08:17:26
您可以配置在Solr中使用哪个Tokenizer。在https://cwiki.apache.org/confluence/display/solr/Tokenizers上有一个列表
Solr中的任何现有Tokenizer都不支持正确索引未分隔的英语单词流。您可以使用字典构建一个自定义的字典,但它会产生错误,因为输入是不明确的。或者,您可以使用N-Gram标记器,并在搜索时接受大量的误报。
正确的解决方案是从一开始就不给这样的流提供数据。如果您需要将紧密连接的字符串用于内部内容,那么可以为索引生成一个单独的版本,在该版本中,您可以用空格而不是空字符串来替换有问题的字符。
https://stackoverflow.com/questions/33573626
复制相似问题