将多值字符串字段添加到Lucene文档中,逗号是否重要?

我正在构建一个Lucene索引并添加文档。

我有一个多值的字段,在这个例子中我将使用Categories。

物品可以有很多类别,例如,牛仔裤可以属于服装,裤子,男士,女士等。

将字段添加到文档时,逗号会有所作为吗? Lucene会不会理睬他们? 如果我将逗号更改为空格会有区别吗? 这会自动使字段多值吗?

String categoriesForItem = getCategories(); // returns "category1, category2, cat3" from a DB call categoriesForItem = categoriesForItem.replaceAll(",", " ").trim(); // not sure if to remove comma doc.add(new StringField("categories", categoriesForItem , Field.Store.YES)); // doc is a Document 

我这样做了吗? 还是有另一种方法来创建多值字段?

任何帮助/建议表示赞赏。

这是为每个文档索引multiValued字段的更好方法

 String categoriesForItem = getCategories(); // get "category1, category2, cat3" from a DB call String [] categoriesForItems = categoriesForItem.split(","); for(String cat : categoriesForItems) { doc.add(new StringField("categories", cat , Field.Store.YES)); // doc is a Document } 

每当具有相同名称的多个字段出现在一个文档中时,反向索引和术语向量都将按照添加字段的顺序逻辑地将字段的标记附加到彼此。

同样在分析阶段,两个不同的值将通过setPositionIncrementGap()自动分配位置增量。 让我解释为什么需要这样做。

文档D1中的字段“类别”有两个值 – “foo bar”和“foo baz”现在如果你要做一个短语查询“bar foo”D1就不应该出现了。 这是通过在同一字段的两个值之间添加额外增量来确保的。

如果您自己连接字段值并依赖分析器将其拆分为多个值,则“bar foo”将返回D1,这将是不正确的。

如果您使用StandardAnalyzer,则可以使用逗号或空格。 但是,如果您有另一个分析器,它取决于。

另一种方式:您可以在同一个字段中多次使用其他类别。 然后我会建议使用KeywordAnalyzer或让它未被篡改以与您的类别名称完全匹配。