Solr短语查询忽略停用词

时间:2017-04-24 08:49:32

标签: solr

我正在使用Apache Solr为网站创建搜索功能。 我使用默认类型text_it设置文本字段,text_it在托管架构中定义如下:

<fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.ElisionFilterFactory" articles="lang/contractions_it.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_it.txt" ignoreCase="true"/>
      <filter class="solr.ItalianLightStemFilterFactory"/>
    </analyzer>
  </fieldType>

我有一个大型熟食产品数据库。每个产品都有产品类型和生产者的名称。例如:

  • 产品类型:Prosciutto di 帕尔马,生产者名称:公司abc
  • 产品类型:Brunello di Montalcino,生产者名称:酿酒师x
  • 产品类型:Brunello di Montalcino,生产者名称:酿酒师y
  • 产品类型:Miele di Montalcino,生产者名称:公司alpha
  • 产品类型:Lardo di Colonnata,生产者名称:公司测试版
  • ......还有更多

请注意, di 一词在文件stopwords_it.txt中被归类为意大利语停用词。

给出上面的记录,如果我在没有指定字段名称的情况下查询 brunello di montalcino ,我会在字段product-type中获得所有带有 di 字样的记录。不幸的是,结果很大,并且大多数与用户查询完全无关。显然这不是我想要的。

理想情况下,我只希望获得 brunello di montalcino 的2条记录。也可以用 miele di montalcino

获得记录

什么样的solr设置可以让我实现这个目标?

由于

C

1 个答案:

答案 0 :(得分:0)

在设计完模式(正如您所做)之后,正确使用了停用词和收缩文件,以下步骤是设计solrconfig.xml,特别是将处理您的请求的请求处理程序。 在那里,您可以使用默认字段配置查询解析器,并可能提前配置(例如要涉及的不同字段,不同的提升等)[1]

正确配置请求处理程序后,您可以运行短语查询(引号很重要): “brunello di montalcino”

如果您想要更多一点灵活性,您可以使用您的相关性并指定(最小匹配)因子来获得您提到的结果(使用miele di Montalcino)

[1] https://cwiki.apache.org/confluence/display/solr/Query+Syntax+and+Parsing

相关问题