【问题标题】:solr query does not find wordsolr 查询未找到单词
【发布时间】:2012-12-07 23:16:14
【问题描述】:

我有一个包含

的字段
... Sie kennen zentrale Stationen des Lebenswegs Muhammads. • Sie ke ...

我是这样配置的

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.WordDelimiterFilterFactory" 
                    generateWordParts="1" generateNumberParts="0" catenateWords="1"
                    catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"
                    splitOnNumerics="0" stemEnglishPossessive="0"/>
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.ReversedWildcardFilterFactory" />
            <filter class="solr.LengthFilterFactory" min="1" max="100" />
        </analyzer>
    </fieldType>

但是

q=volltext:lebenswegs
q=volltext:Lebenswegs

没有给出结果,为什么?

q=volltext:lebensweg*

找到文档

我正在使用 solr 1.4

编辑:

拆分配置

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.WordDelimiterFilterFactory" 
                    generateWordParts="1" generateNumberParts="0" catenateWords="1"
                    catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"
                    splitOnNumerics="0" stemEnglishPossessive="0"/>
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.ReversedWildcardFilterFactory" />
            <filter class="solr.LengthFilterFactory" min="1" max="100" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.WordDelimiterFilterFactory" 
                    generateWordParts="1" generateNumberParts="0" catenateWords="1"
                    catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"
                    splitOnNumerics="0" stemEnglishPossessive="0"/>
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.LengthFilterFactory" min="1" max="100" />
        </analyzer>
    </fieldType>

导致相同的结果

分析器似乎匹配,但我的查询结果为空

查询调试:

<lst name="debug">
 <str name="rawquerystring">volltext:Lebenswegs</str>
 <str name="querystring">volltext:Lebenswegs</str>
 <str name="parsedquery">volltext:lebenswegs</str>
 <str name="parsedquery_toString">volltext:lebenswegs</str>
 <lst name="explain"/>
 <str name="QParser">LuceneQParser</str>
 <lst name="timing">
  <double name="time">1.0</double>
  <lst name="prepare">
    <double name="time">1.0</double>
    <lst name="org.apache.solr.handler.component.QueryComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.FacetComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.MoreLikeThisComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.HighlightComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.StatsComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.DebugComponent">
     <double name="time">1.0</double>
    </lst>
  </lst>
  <lst name="process">
    <double name="time">0.0</double>
    <lst name="org.apache.solr.handler.component.QueryComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.FacetComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.MoreLikeThisComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.HighlightComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.StatsComponent">
     <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.DebugComponent">
     <double name="time">0.0</double>
    </lst>
  </lst>
 </lst>
</lst>

【问题讨论】:

  • 通过使用 solr 1.4 和您的配置,我已索引数据并搜索您询问的关键字。一切正常。应该还有别的。
  • 您使用了哪些配置?第一个还是第二个?
  • hm 感谢您的测试解决了它:问题是原始文本的长度(86KB)但 maxFieldLength 是 10000。我增加了它并且它工作

标签: solr schema wildcard


【解决方案1】:

可能唯一的原因可能是:-

<filter class="solr.ReversedWildcardFilterFactory" />

Documentation:-

反转标记以提供更快的前导通配符和 前缀查询。 将此过滤器添加到索引分析器,但不是 查询分析器。标准的 Solr 查询解析器 (SolrQuerySyntax) 将 使用它来反转通配符和前缀查询以提高性能 (例如,将 myfield:foo 翻译成 myfield:oof)。避免 冲突和错误匹配,反向标记用 a 索引 不应出现在索引文本中的前缀。

因此它似乎适用于通配符,但不适用于普通查询。
您可以尝试将其从查询分析器中删除并检查。

【讨论】:

  • hm 这并没有改变结果,只有当我从它显示的两个分析器中删除 ReversedWildcardFilterFactory 但是,然后领先的通配符不再起作用任何想法如何让两者都起作用?
  • 配置更改后您是否重新启动了服务器?您还可以检查分析以了解索引分析会产生哪些标记?
  • 是的,analyze 似乎匹配了一些东西,但是在查询时我没有得到任何结果
  • 如果你打开调试,形成什么查询?
  • 我已经添加了 dbug 输出
猜你喜欢
  • 1970-01-01
  • 2014-02-08
  • 2021-11-22
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2018-09-19
相关资源
最近更新 更多