【问题标题】:SOLR matching phrases (SHINGLE FILTER)SOLR 匹配短语 (SHINGLE FILTER)
【发布时间】:2015-07-21 16:56:27
【问题描述】:

我正在使用 SOLR 5.2 构建一个应用程序,我需要这种类型的匹配:

如果我存储了字段名称:“bla1 bla2”和名称:“bla2 something bla3” 当我查询类似名称的内容时:“something bla1 bla2 something bla3 bla4” 我需要它来匹配两个术语

所以我最终要做的是定义这种类型的字段:

我使用关键字标记器进行索引

我为 query 使用 Whitespace Tokenizer 和 Shingle 过滤器,所以我得到类似“bla tra kla zla cla”输出“bla tra”、“bla tra kla”、“bla tra kla zla”的内容.......

我已经尝试过分析和 shingling 工作正常,但问题是当我使用真实数据执行查询时,它似乎找不到匹配项。

 <fieldType name="shingleparse" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
  <analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>      
<filter class="solr.ShingleFilterFactory" outputUnigrams="false" outputUnigramsIfNoShingles="true" minShingleSize="2" maxShingleSize="5"/>
  </analyzer>   
</fieldType>

<field name="name" type="shingleparse" indexed="true" stored="true" required="true" multiValued="false" />

【问题讨论】:

  • Keyword Tokenizer 将整个文本字段视为单个标记。因此,当您为数据编制索引时,可以将其视为单个令牌 bla2 something bla3
  • 这正是它应该被处理的方式,因为例如,如果我查询像“bla2 something bla3 bla4 bla5”这样的东西,我会得到带状疱疹“bla2 something " , "bla2 something bla3", ... 它应该匹配,但由于某种原因它不匹配
  • 那么在您的示例中,第一个 (bla1 bla2) 匹配而不是第二个 (bla2 something bla3)?跨度>
  • 使用 Web 界面下的“分析”页面查看为什么 shingle 没有生成您认为应该匹配的匹配项..
  • 问题是它生成的正是我想要的带状疱疹,但它与它们不匹配,这就是问题

标签: java solr solrj


【解决方案1】:

您能否检查一下这是否符合您的要求。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
         <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.StandardTokenizerFactory"/>
         <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"/>
   </analyzer>
</fieldType>

【讨论】:

  • 这并不能解决我的问题,因为如果我查询确切的单词“bla1 bla2”它匹配但如果我查询名称:“bla1 bla2 ttttttt" 这不匹配,我希望它匹配
  • 它将匹配...在分析页面检查这些localhost/solr/admin/analysis.jsp
  • 我也试了第二个,和上面的fieldType匹配
  • 对我来说,我不会在帖子中发布图片
  • 请记住,这也将匹配相反的方向,并且查询术语也不接近的地方。 shingle 方法只会匹配顺序相同的令牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多