如何使用solr短语

时间:2014-02-20 13:48:00

标签: solr phrases

我正在使用solr4.1.0而我正试图让常用的单词短语搜索工作。这意味着在搜索“猫”时,我希望显示包含此短语的文档,而不是在某处或不同字段中包含“the”和“cat”的文档。

我有什么:

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords.txt" format="snowball" />
            <filter class="solr.StopFilterFactory" words="lang/stopwords.txt" format="snowball" enablePositionIncrements="true" />
        </analyzer>
    </fieldType>

当“普通”单词与来自stopwords.txt的禁用词组合时,这应该输出特殊的克令牌。在分析视图中,这可以按预期工作,因此“猫”被普遍编写为“the_cat cat”。

我的客户端所遇到的解决方案是,当查询中的停用词与普通单词一起使用时,只有具有此精确短语(stop-word-2-shingle)的元素才能匹配。整体默认运算符仍为AND。

例如,我有包含以下字段的文档

  1. id:1;标题:我的猫在自然环境中; desc:da world中最好的动物是猫
  2. id:2;标题:猫是邪恶的; desc:每个人都知道猫是纯粹的邪恶
  3. id:3;标题:解决谜团的猫; desc:我们的猫叫做Sherlock
  4. 以下是我想要实现的内容的示例...基本上,用户在搜索和查询以及运算符方面或多或少是文盲,因此搜索应该解释输入并“做正确的事情”。正确的做法是:

    1. 输入:cat
      结果:文档1,2,3(没有为了容易而得分)
    2. 输入:猫世界
      结果:doc 1
      AND是默认的
    3. 输入:cat everyone everyone 结果:doc 2
      和跨越多个领域
    4. 输入:猫
      结果:doc 1 因为只有这个字段包含短语“猫”,在查询
    5. 期间必须以某种方式神奇地出现
    6. 输入:好猫 reult:[]
      因为没有文档包含短语“the nice”,算法会将其解释为常用词短语
    7. 输入:猫世界 结果:doc 1
    8. 输入:纯粹 结果:[]
    9. 这背后的原因是客户对某些(精心挑选的)停用词有一些具体的想法 那么这是一种现实的做法吗?是否有必要在将其传递给solr之前进行某种查询预解析?还有其他方法可以达到预期的效果吗?

0 个答案:

没有答案