假设我有一个如下所示的域对象:
@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。弦桥在
http://docs.jboss.org/hibernate/search/3.1/reference/en/html/search-mapping-bridge.html 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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)