Solr 结果在单词中间停止

Solr 结果在单词中间停止,solr,wildcard,Solr,Wildcard,我不太清楚这个标题该怎么说。基本上,当我搜索“anim”时,它会找到“动物”,但当我搜索“anima”时,它什么也找不到。然后如果我搜索“动物”,它会再次找到“动物” 有人知道为什么它不适用于《阿尼玛》吗?这似乎发生在大多数单词上——但在不同的字符上——例如“eleph”和“elephan”都可以——但是“elepha”不会返回任何东西 以下是查询和结果: 查询1(好) /solr/select?fq=type:tag&q=name:anim <response> <lst n

我不太清楚这个标题该怎么说。基本上,当我搜索“anim”时,它会找到“动物”,但当我搜索“anima”时,它什么也找不到。然后如果我搜索“动物”,它会再次找到“动物”

有人知道为什么它不适用于《阿尼玛》吗?这似乎发生在大多数单词上——但在不同的字符上——例如“eleph”和“elephan”都可以——但是“elepha”不会返回任何东西

以下是查询和结果:

查询1(好)

/solr/select?fq=type:tag&q=name:anim

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="fq">type:tag</str>
<str name="q">name:anim</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<int name="id">1</int>
<str name="name">Animals</str>
<arr name="name_auto">
<str>Animals</str>
<str>Animals</str>
</arr>
<date name="timestamp">2012-08-01T08:16:38.789Z</date>
<str name="type">tag</str>
<str name="unique_id">tag_1</str>
</doc>
</result>
</response>

0
1.
类型:标签
姓名:anim
1.
动物

  • 阿尼玛
  • 畜生

  • 安萨里是对的,问题在于堵塞。您发布的Solr模式证明了这一点,因为您使用的是
    PorterStemFilterFactory
    。如果要搜索部分单词,可以尝试使用通配符查询,具体取决于所使用的查询解析器。如果您使用的是Solr3.x,它们可能会太慢,而使用Solr4.x,这一点已经改进了很多。然后,您可能希望进行匹配,以便
    anima
    也匹配
    animals

    这可能是由于词干。将单词anim、anima和animal放入分析框,查看它们是如何被阻止的。这不是通配符搜索,因为您没有在搜索短语后添加星号。我同意,您可以从Solr架构发布您的
    名称
    字段定义(以及相关字段类型)吗?@javanna-请参见上面的编辑1。安萨里,见上面的编辑2。
    
    <response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
    <lst name="params">
    <str name="fq">type:tag</str>
    <str name="q">name:anima</str>
    </lst>
    </lst>
    <result name="response" numFound="0" start="0"/>
    </response>
    
    <response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
    <lst name="params">
    <str name="fq">type:tag</str>
    <str name="q">name:animal</str>
    </lst>
    </lst>
    <result name="response" numFound="1" start="0">
    <doc>
    <int name="id">1</int>
    <str name="name">Animals</str>
    <arr name="name_auto">
    <str>Animals</str>
    <str>Animals</str>
    </arr>
    <date name="timestamp">2012-08-01T08:16:38.789Z</date>
    <str name="type">tag</str>
    <str name="unique_id">tag_1</str>
    </doc>
    </result>
    </response>
    
     <field name="name" type="text" indexed="true" stored="true" required="true" />
    
     <fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
          <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <!-- in this example, we will only use synonyms at query time
            <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
            -->
            <!-- Case insensitive stop word removal.
              add enablePositionIncrements=true in both the index and query
              analyzers to leave a 'gap' for more accurate phrase queries.
            -->
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                    />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                    />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
          </analyzer>
        </fieldType>