如何使用逗号分隔的文本值索引字段 - 休眠搜索

时间:2012-04-28 18:05:22

标签: lucene hibernate-search

我正在实现基于hibernate search3.2的图书搜索功能。

Book对象包含一个名为authornames的字段。 Authornames值是一个名字列表,逗号是分词,说“John Will,Robin Rod,James Timerberland”

@Field(index = org.hibernate.search.annotations.Index.UN_TOKENIZED,store=Store.YES)
@FieldBridge(impl=CollectionToCSVBridge.class)
private Set<String> authornames;

我需要每个名字都是UN_TOKENIZED,所以用户搜索书的单一作者名称:John Will,Robin Rod或James Timerberland。

我使用Luke检查索引,authornames字段中的值存储为“John Will,Robin Rod,James Timerberland”,但我无法通过查询“authornames:John Will”得到结果

任何人都可以告诉我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为 CollectionToCSVBridge 将所有名称与一个更大的字符串中的“,”连接起来。 您应该将它们分开,并将每个元素分别添加到索引中:

@Override
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
    if ( value == null ) {
        return;
    }
    if ( !( value instanceof Collection ) ) {
        throw new IllegalArgumentException( "This FieldBridge only supports collections." );
    }
    Collection<?> objects = (Collection<?>) value;

    for ( Object object : objects ) {
        luceneOptions.addFieldToDocument( name, objectToString( object ), document ); // in your case objectToString could do just a #toString
    }
}

另见https://forum.hibernate.org/viewtopic.php?f=9&t=1015286&start=0