Solr搜索标签或提及
我们使用solr版本3.5搜索推文,我使用以下设置的Solr搜索标签或提及,solr,Solr,我们使用solr版本3.5搜索推文,我使用以下设置的WordDelimiterFactory,可以搜索@username或\hashtags: <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" split
WordDelimiterFactory
,可以搜索@username
或\hashtags
:
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" handleAsChar="@#"/>
好的,通过阅读您提到的SOLR-2059补丁,看起来他们已经将WordDelimiterFactory上的
handleAsChar
属性替换为types
属性。以下是Analyzer、Tokenizer和Token Filters Solr Wiki页面中该属性的规范:
types=“wdfftypes.txt”允许对此筛选器进行自定义标记化。该文件应该存在于solr/conf目录中,并且条目的格式(不带引号)“%=>ALPHA”或“\u002C=>DIGIT”。允许的类型有:下、上、字母、数字、字母数、子字
因此,如果我们以本文档以及SOLR-2059中的文件为例,我建议如下:
然后定义twittertypes.txt文件,如下所示,并将其放置在Solr实例中schema.xml文件所在的文件夹中(可能是conf文件夹)
请注意,您需要使用Unicode字符(UTF-8)作为哈希符号,因为它在文本文件中被视为注释
根据所有文档,这将解决您的问题,并将#和@符号视为alpha字符,这将提供您正在寻找的行为。您还可以构建,它将解析用户名和hashtag作为本机的特殊标记。然后,您可以添加一个自定义过滤器,该过滤器规范化这些用户名和hashtag的大小写(假定它们不区分大小写),同时保持其他标记不变:
<fieldType name="text_twitter" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
<filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
<filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
</analyzer>
</fieldType>
您能否显示您正在使用的整个fieldType定义,以便在其他筛选器或标记器可能影响您的结果时我们可以显示?就我个人而言,我只需在索引中添加两个字段,一个用于提及列表,一个用于标记。将这些内容添加到索引时,从tweet中解析出来。这样你就不需要依赖新功能了。谢谢Paige,昨晚很晚才解决了这个问题,正如你所说的那样工作。我完成了上述所有工作,重新启动了solr服务,仍然在搜索#pizza,pizza会产生相同的结果,有什么线索或者我应该遵循的步骤吗?在进行配置更改后,你是否重新编制了文档索引?每当您在schema.xml文件中进行影响文档索引方式的更改时,都必须重新为文档编制索引,以使更改反映在索引项中。是的,我做了manage.py rebuild\u index
和manage.py update\u index
仍然一样,可能是我做错了什么。
<fieldType name="text_twitter" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
<filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
<filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
</analyzer>
</fieldType>