0

我有一个包含以下数据的文档网

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(被索引)包含“ABCD”,我不希望文档被返回(用户看不到它)

到目前为止,我已将 car 和 sku 定义为 text_en。
但我没有得到第 2 和第 3的项目符号。
是否有更好的方法来定义 sku 属性。

我的查询是

 http://....:8983/solr/vault/select?q=ABCD&qf=Name+SKU&defType=edismax

谢谢。

4

1 回答 1

2

您在这里尝试做的实际上是对由破折号(“-”)分隔的标记进行通配符搜索。

一种简单(但性能缓慢)的方法是在查询中的单词末尾添加一个星号 (*),如下所示:

http://....:8983/solr/vault/select?q=AB*&qf=Name+SKU&defType=edismax

另一种选择是更改用于索引和实现 NGram 算法的字段类型。如果您在您的字段中使用此过滤器,您将为您正在索引的单词中的每个字母组合创建一个toklen。例如: ABCD => AB, ABC, ABCD 所以它会找到你要找的东西,搜索会很快,但索引会很大,索引时间也会显着增加。

你可以在这里找到更多信息: http ://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.EdgeNGramFilterFactory

于 2013-08-08T12:46:02.040 回答