2015-07-20 73 views
1

我正在学习solr。我想在Solr中使用ngrams。例如:如何使用与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 

(应考虑新约克作为一个单词来获得更好的结果。有一些单词序列需要考虑为单个单词,例如: - 纽约,汤姆克鲁斯等,这些单词是预定义的;所有其他单词应该被视为正常)

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

+1

所以你不想使用NGrams过滤器?实际上 – alexf

+0

不需要n-gram过滤器。 –

+0

纽约就是一个例子。如果我有一组词应该总是考虑像纽约这样的单个词 – Koottalida

回答

1

第一次尝试应该在“纽约”这个术语周围加上引号,然后尝试。

这将是你的第二次尝试。

将Tokenizer从StandardTokenizerFactory更改为KeywordTokenizerFactory

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

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

不分析StrField类型,但逐字索引/存储。

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

/select?q =“纽约”给出结果。但是我怎样才能达到第一个要求? – Koottalida

+1

第一个要求是什么? –

+0

该文档不应返回以下查询: 1)/ select?q = york 2)/ select?q = new – Koottalida