在Solr中搜索也包括主题标签

时间:2016-04-28 17:10:18

标签: solr lucene tokenize solr4 stemming

假设我在solr中搜索关键字IPL,我想要包含IPL和#IPL的结果。如何实现这个目标?

我在索引和查询中尝试了如下所示的WordDelimFactory,但没有成功     

我想我必须将字符串拆分为" string"和"#string"但不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

如果您希望每个keryword都搜索为#keyword,那么您可以尝试在查询中使用OR运算符,如

/select?q="IPL" OR "#IPL"

如果您想在特定字段中搜索

/select?q=title:"IPL" OR title:"#IPL"

您可以尝试使用同义词。但在这种情况下,它只是前缀#。

转到solr实例的配置文件。在conf文件夹中编辑synonyms.txt文件。

IPL => #IPL

OR

在schema.xml文件中更改查询字段标记生成器,

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">  
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

然后使用字段名称/select?q=text:#IPL

进行查询

因为在solr文本中是默认的,所以您可以尝试/select?q=#IPL

答案 1 :(得分:0)

这是通过WordDelimiterFilterFactory完成的。设置generateWordParts=1.并保留preserveOriginal = 1。 这将保留原始内容并在没有#。

的情况下创建新内容

修改schema.xml后重新启动服务器并重新索引数据。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>

        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory"
                protected="protwords.txt"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="1"
                catenateNumbers="1"
                catenateAll="0"
                splitOnCaseChange="0"
                preserveOriginal="1"/>
        <filter class="solr.LengthFilterFactory" min="2" max="100" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

      </analyzer>
    </fieldType>