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