我有一個看起來像這樣一個Hibernate Search的實體類:Hibernate Search可以使用嵌入式收集字段實現Lucene FullTextFilter嗎?
@Entity
@Indexed
@FullTextFilterDefs({
@FullTextFilterDef(name="myFilter", impl=MyFilterFactory.class)
})
public class Parent {
...
@Column
@Field
private String name;
@ManyToMany
@IndexedEmbedded
private Set<Child> children;
...
}
相關的enity同樣簡單:
@Entity
@Indexed
public class Child {
...
@Column
@Field
private String name;
@ManyToMany(mappedBy="children")
@ContainedIn
private Set<Parent> parents;
...
}
如果MyFilterFactory.getFilter()
方法正在與Parent
這樣一個簡單的領域(硬編碼以便於說明):
...
Term term = new Term("name", "daddy");
Query query = new TermQuery(term);
return new CachingWrapperFilter(new QueryWrapperFilter(query));
...
...然後FullTextQuery
的此過濾器啓用按預期工作。
不過,如果我更改過濾器使用嵌入式領域的領域:
...
Term term = new Term("children.name", "Junior");
Query query = new TermQuery(term);
return new CachingWrapperFilter(new QueryWrapperFilter(query));
...
...然後我每次都遇到0命中,儘管搜索表達式children.name:parent=junior
工程只是在盧克罰款。
有什麼我在這裏失蹤?很明顯,因爲我可以在盧克搜索它,所以信息就在那裏。有沒有什麼特別的,你必須做Hibernate搜索實施FullTextFilter
這樣的嵌入式領域,而不是一個簡單的領域?
好吧,看起來你缺少了你的例子中的一個重要部分,即名稱字段上的_ @ Indexed_。如果這只是你身邊的一個疏忽,它應該真的有效。如果你可以在單元測試中重現問題,我建議你在這裏提出問題 - https://hibernate.onjira.com/browse/HSEARCH – Hardy
順便說一句,你是什麼意思與'children.name:parent=junior作品'?這個查詢沒有意義。什麼是父母=部分的交易? – Hardy
只有這個類本身是不是'@索引'?我已經在兩個類上都有@ @索引了,並且我分別用'@ IndexedEmbedded'和'@ ContainedI'n註釋了相關的字段。但是,我忽略將@Field放在可搜索字段上,所以我更新了上面的代碼片段。只要我能打包一個適當的單元測試,我就會創建一個JIRA票據。 –