首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >edismax不支持CommonGramsQueryFilterFactory?

edismax不支持CommonGramsQueryFilterFactory?
EN

Stack Overflow用户
提问于 2013-01-17 20:44:51
回答 2查看 166关注 0票数 2

我使用Solr3.6作为搜索服务器,并且有一个text_general类型,它是:

代码语言:javascript
复制
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /> 
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" /> 
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.CommonGramsQueryFilterFactory" words="stopwords.txt" ignoreCase="true" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /> 
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" /> 
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
</fieldType>

但我发现,当我使用edismax搜索"to be or not to be“时,由于停用词的配置,整个短语都会被删除。但我确实使用了CommonGramsQueryFilterFactory进行查询分析。调试结果显示:

代码语言:javascript
复制
<str name="rawquerystring">to be or not to be</str>
<str name="querystring">to be or not to be</str>
<str name="parsedquery">+()</str>
<str name="parsedquery_toString">+()</str>

我哪里做错了?edismax不支持CommonGramsQueryFilterFactory?

EN

回答 2

Stack Overflow用户

发布于 2013-10-01 20:51:08

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.CommonGramsFilterFactory

“通过组合通用标记(通常与停用词列表相同)和常规标记来生成带状结构(即the_cat)。”

看起来它只将普通令牌与常规令牌组合在一起。您正在尝试做的是将通用令牌与通用令牌相结合,这可能是失败的原因。

我还没有尝试过,但正在考虑使用它,并遇到了您的问题和这篇文档。

票数 0
EN

Stack Overflow用户

发布于 2014-08-06 15:22:53

似乎edismax对查询进行了标记化,并按其自身来分析每个术语。CommonGramsQueryFilter应该获取所有单词以生成对,但在本例中,它获取术语“to”并且不执行任何操作,然后获取术语“be”并且不执行任何操作,依此类推。

因此,在这种情况下,CommonGramsQueryFilter什么也不做,StopFilterFactory删除所有停用词,只留下一个空查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14379429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档