首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果查询字符串以短词开头,Solr找不到记录

如果查询字符串以短词开头,Solr找不到记录
EN

Stack Overflow用户
提问于 2017-10-12 17:20:25
回答 1查看 375关注 0票数 0

我使用的是Solr4,并且我已经有了长度过滤器工厂

<filter class="solr.LengthFilterFactory" min="3" max="99"/>

如果我的查询字符串以少于3个字符的单词开头,solr将不会返回任何结果。我没想到这会成为问题,因为我使用的是LengthFilterFactory。下面是一些示例:

标题是:"In the close future...

如果我搜索q:In the close future,solr什么也不返回

如果我搜索q:the close future,solr会找到该记录

标题是:"I have some solr problem“和上面发生的一样……

我不允许搜索少于3个字符的单词,但我没想到如果我使用少于3个字符的单词,会导致solr失败。也许LengthFilterFactory不是问题所在?

下面是我的查询示例:

INFO: [collection1] webapp=/solr-example path=/select params={mm=100%25&json.nl=flat&fl=id&start=0&sort=date_0_i+desc,hour_0_i+desc&fq=type_s:(1+5+6+8+9+10)&fq=site_i:1&fq=terms_txt:I+have+some+solr+problem&fq=date_in_i:[20050101+TO+*]&fq=date_in_i:[*+TO+20171012]&fq=language_is:0&rows=10&bq=&q=I+have+some+solr+problem&tie=0.1&defType=edismax&omitHeader=true&qf=terms_txt&wt=json} hits=0 status=0 QTime=1

下面是我的模式。我将向您展示我正在搜索的字段的字段定义。有人知道这里出了什么问题吗?

<fieldType name="text_general_example" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>          
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(^|\s)([^\-\_&amp;\s]+([\-\_&amp;]+[^\-\_&amp;\s]*)+)(?=(\s|$))" replacement="$1MжџљМ$2 $2" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\bMжџљМ([^\s]*?)\b[\-_&amp;]+" replacement="MжџљМ$1" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\bMжџљМ([^\s]*?)\b[\-_&amp;]+" replacement="MжџљМ$1" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\bMжџљМ([^\s]*?)\b[\-_&amp;]+" replacement="MжџљМ$1" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="MжџљМ" replacement="" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(\w)&amp;(\w)" replacement="$1and$2" />
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="3" max="99"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\b[\-_]+\b" replacement="" />
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(\w)&amp;(\w)" replacement="$1and$2" />
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="3" max="99"/>
    <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.RemoveDuplicatesTokenFilterFactory" />
  </analyzer>
</fieldType>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 17:43:34

查询的问题是,如果您正在搜索

field:I have a problem

然后,在解析之后,您将实际获得以下查询field:I defaultField:have defaultField:a ...,其中默认字段通常在solrconfig.xml中指定。您也可以使用参数debugQuery自己调试这些问题

一些令牌将被删除,这就是您没有获得正确结果的原因。要执行正确的查询,需要用双引号"将查询括起来

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

https://stackoverflow.com/questions/46705864

复制
相关文章

相似问题

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