我有一个包含以下数据的documnet
car {
id: guid
name: string
sku: list<barcode>
}
现在, 条形码没有图案。它可以是以下任何一个:
ABCD-EF34GD-JOHN
ABCD-C08-YUVF
我想索引我的文档,以便搜索
1. ABCD将同时返回。
2. AB将同时返回。
3. JO - 将返回ABCD-EF34GD-JOHN而不是名字为john的车
4.如果ID(被索引)包含&#34; ABCD&#34;,我不希望返回文档(用户没有看到它)
到目前为止,我已将car和sku定义为text_en 但是我没有2号和3号小号 有没有更好的方法来定义sku属性。
我的查询
http://....:8983/solr/vault/select?q=ABCD&qf=Name+SKU&defType=edismax
感谢。
答案 0 :(得分:2)
你在这里尝试做的实际上是用短划线(“ - ”)分隔的标记上的通配符搜索。
一种简单(但性能较慢)的方法是在查询的单词末尾添加一个星号(*),如下所示:
http://....:8983/solr/vault/select?q=AB*&qf=Name+SKU&defType=edismax
另一种选择是更改用于索引的字段类型并实现NGram算法。如果在字段中使用此过滤器,则将为要编制索引的单词中的每个字母组合创建一个toklen。例如:ABCD =&gt; AB,ABC,ABCD 所以它会找到你要找的东西,搜索速度会很快,但索引会非常大,索引时间也会显着增加。
您可以在此处找到更多信息: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.EdgeNGramFilterFactory