首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么才能比词干版本先得到最初的术语呢?

我怎么才能比词干版本先得到最初的术语呢?
EN

Stack Overflow用户
提问于 2015-06-29 10:10:41
回答 1查看 779关注 0票数 3

我一直试图在Solr 5.0.0结果中首先得到准确的匹配结果。

例如,

  • 冥想碗
  • 女神鲍尔斯
  • 天碗
  • 保龄球绿
  • 33碗藏语歌唱碗
  • 尘碗复活
  • 星光碗

如果我搜索一个单词bowl,预期的结果是:

  1. 尘碗复活
  2. 星光碗
  3. 冥想碗
  4. 女神鲍尔斯
  5. 天碗
  6. 保龄球绿
  7. 33碗藏语歌唱碗

确切地说,结果应该是第一位的。我的模式如下所示:

代码语言:javascript
复制
 <fieldType name="text_wslc" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
     <filter class="solr.WordDelimiterFilterFactory"
                             generateWordParts="1"
                             generateNumberParts="1"
                             catenateWords="1"
                             catenateNumbers="1"
                             catenateAll="1"
                             preserveOriginal="1"
                             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.KeywordRepeatFilterFactory"/>
     <filter class="solr.PorterStemFilterFactory"/>
     <filter class="solr.KStemFilterFactory"/>
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
     <filter class="solr.WordDelimiterFilterFactory"
                             generateWordParts="1"
                             generateNumberParts="1"
                             catenateWords="1"
                             catenateNumbers="1"
                             catenateAll="1"
                             preserveOriginal="1"
                             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.KeywordRepeatFilterFactory"/>
     <filter class="solr.PorterStemFilterFactory"/>
     <filter class="solr.KStemFilterFactory"/>
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
   </analyzer>
 </fieldType>

我已经看到,使用KeywordRepeatFilterFactory提供了一个完全匹配的,然后停止的版本。但这对我没用。

EN

回答 1

Stack Overflow用户

发布于 2015-06-29 10:51:36

您可以在schema.xml中添加另一个字段。此字段将包含原始字段的副本:

代码语言:javascript
复制
<field name="title" type="text_wslc" indexed="true" stored="true"/>
<field name="titleExact" type="text_wslcExact" indexed="true" stored="true"/>
<copyField source="title" dest="titleExact"/>

其中text_wslcExact是这样的:

代码语言:javascript
复制
<fieldType name="textExact" class="solr.TextField" positionIncrementGap="100" >
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="20"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="20"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>

接下来要做的就是向查询中添加(并提升)这个新字段。因此,在您的solrconfig.xml,中尝试这样做:

代码语言:javascript
复制
<str name="qf">title titleExact^10</str>
<str name="pf">title^10 titleExact^100</str>

这是我的消息来源,您可以在这里得到所有的解释。

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

https://stackoverflow.com/questions/31112957

复制
相关文章

相似问题

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