java - 如何注释以允许使用 Hibernate Search 搜索 List<String> 字段

标签 java hibernate hibernate-search

假设我有一个如下所示的域对象:

@Entity
@Indexed
public class Thingie implements DomainObject {  

private Long id;        
private Integer version;

private String title;    
private List<String> keywords = new Vector<String>();    

@Id
@GeneratedValue
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

@Version
public Integer getVersion() {
    return version;
}
public void setVersion(Integer version) {
    this.version = version;
}

@Column(length=64, nullable=false)
@Field(index=Index.TOKENIZED,store=Store.NO)
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}


@ElementCollection
    // what do I put here??
public List<String> getKeywords() {
    return keywords;
}
public void setKeywords(List<String> keywords) {
    this.keywords = keywords;
}       
 }

如何注释关键字字段,以便我可以进行这样的搜索,即对标题和关键字进行全文搜索:

 org.apache.lucene.search.Query query = qb.keyword().onFields("title","keywords")
 .matching("search").createQuery();

最佳答案

您可以使用 StringBridge。检查 4.2.2.1。

中的 StringBridge

http://docs.jboss.org/hibernate/search/3.1/reference/en/html/search-mapping-bridge.html

例如,如果您将关键字存储在数据库中的格式为:aa,bb,cc

@FieldBridge(impl=CollectionToCSVBridge.class) //your bridge implementation
private List<String> keywords;

一种实现可能是:

 public class CollectionToCSVBridge implements StringBridge
 {
     public String objectToString(Object value)
     {
        if(value != null)
        {
            StringBuffer buf = new StringBuffer();

            Collection<?> col = (Collection<?>)value;
            Iterator<?> it = col.iterator();
            while(it.hasNext())
            {
                String next = it.next().toString();
                buf.append(next);
                if(it.hasNext())
                    buf.append(", ");
            }
            return buf.toString();
        }
        return null;
    }
}

关于java - 如何注释以允许使用 Hibernate Search 搜索 List<String> 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608281/

相关文章:

java - HQL更新问题

java - 无效映射异常 : Could not parse mapping document

java - hibernate 搜索 | Lucene Kuromojo 分析器取决于方法名称

java - 获取表列表时 Hibernate NativeQuery setParameter 不起作用

java - Spring Batch 提交间隔配置不起作用

spring - HibernatePersistence javax.naming.NameNotFoundException 抛出数据源

hibernate - 由 : java. lang.IllegalArgumentException 引起 : java. lang.Object 不是索引实体或索引实体的子类

java - MP3特征提取

JAVA - 拆分包含分隔符#| 的字符串.如果多次出现#|,字符串也应该拆分喜欢 - #|#|