【问题标题】:How to use ngrams matching with Solr如何使用与 Solr 匹配的 ngram
【发布时间】:2015-07-20 09:33:22
【问题描述】:

我正在学习 solr。我想在 Solr 中使用ngrams。例如:

如果文档包含 new york car driver ,则该文档不应针对以下查询返回:

/select?q=york
/select?q=new
/select?q=new car

但它应该为以下查询返回

/select?q=new york
/select?q=car
/select?q=driver
/select?q=car driver

( 它应该将 New York 视为单个单词以获得更好的结果。有一些单词序列需要考虑为单个单词。例如:-New York、Tom Cruise 等。这些单词是预定义的;所有其他单词都应该被处理正常)

如何使用 Solr 搜索实现这一目标?

【问题讨论】:

  • 所以你不想使用 NGrams 过滤器??
  • 其实不需要n-gram过滤器..
  • 纽约就是一个例子。如果我有一组单词应该总是考虑一个单词,比如 new york

标签: search solr lucene nlp n-gram


【解决方案1】:

第一次尝试应该在“纽约”之类的术语周围加上引号并尝试。

这将是您的第二次尝试。

将 Tokenizer 从 StandardTokenizerFactory 更改为 KeywordTokenizerFactory

更改后重新索引数据并再次查询。

第三个选项是使用 StrField 类型,它不能进行任何标记化或分析,只会给出完全匹配的结果。

StrField 类型不被分析,而是逐字索引/存储。

 <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

【讨论】:

  • /select?q="new york" 给出了结果。但是我怎样才能达到第一个要求?
  • 第一个要求是什么?
  • 该文档不应针对以下查询返回:1) /select?q=york 2) /select?q=new
  • ok.... 将分词器从 StandardTokenizerFactory 更改为 KeywordTokenizerFactory 并尝试...
  • strField 不会有任何标记化对吗?我认为它可能不起作用(将在检查后确认)。我已经更新了问题。你能检查一下吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2010-11-21
  • 2018-02-04
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
相关资源
最近更新 更多