使用Hibernate搜索註釋(大多數只是@Field(index = Index.TOKENIZED)
)我已經爲一個名爲Compound的持久化類相關的許多字段建立索引。我已經使用MultiFieldQueryParser
設置了對所有索引字段的文本搜索,目前爲止它工作正常。Lucene通配符匹配在化學符號(?)上失敗
在索引和搜索的字段是被稱爲compoundName字段,具有采樣值:
3-Hydroxyflavone
6,4'-Dihydroxyflavone
當我在充分的相關化合物搜索這些值之一實例返回。然而,當我使用部分名稱和介紹通配符出現問題:
- 尋找
3-Hydroxyflav*
仍然給出了正確的打擊,但 - 尋找
6,4'-Dihydroxyflav*
沒有發現任何東西。
現在因爲我很新的Lucene/Hibernate的搜索,我不太清楚在哪裏看在這一點..我認爲它可能有一些做的'
存在於第二個查詢,但我不知道如何繼續..我應該看看Tokenizers/Analyzers/QueryParsers還是其他的東西?
或者任何人都可以告訴我如何獲得第二次通配符搜索匹配,最好不打破MultiField搜索行爲?
我正在使用Hibernate-Search 3.1.0.GA & Lucene-core 2.9.3。
一些相關的碼位來說明我目前的做法:
@Entity
@Indexed
@Data
@EqualsAndHashCode(callSuper = false, of = { "inchikey" })
public class Compound extends DomainObject {
@NaturalId
@NotEmpty
@Length(max = 30)
@Field(index = Index.TOKENIZED)
private String inchikey;
@ManyToOne
@IndexedEmbedded
private ChemicalClass chemicalClass;
@Field(index = Index.TOKENIZED)
private String commonName;
...
}
如何我目前搜索在索引字段:
String[] searchfields = Compound.getSearchfields();
MultiFieldQueryParser parser =
new MultiFieldQueryParser(Version.LUCENE_29, searchfields, new StandardAnalyzer(Version.LUCENE_29));
FullTextSession fullTextSession = Search.getFullTextSession(getSession());
FullTextQuery fullTextQuery =
fullTextSession.createFullTextQuery(parser.parse("searchterms"), Compound.class);
List<Compound> hits = fullTextQuery.list();
索引複合類的相關部分
僅供參考,我趕緊查了StandardAnalyzer如何您的標記化的例子。 「3-Hydroxyflavone」似乎屬於上述產品規則。它成爲一個單一的標誌「3-羥基黃酮」。另一方面,「6,4'-二羥基黃酮」變成兩個「6,4」和「二羥基黃酮」。 – Hardy 2010-09-24 09:03:06
哇,謝謝!我只是試圖在這裏使用盧克來測試相同的..這是否意味着我需要使用備用分析儀? (我嘗試將該字段設置爲UN_TOKENIZED,但甚至打破了第一個搜索示例..) – Tim 2010-09-24 10:27:02
它看起來StandardTokenizer將單詞分隔爲撇號。這至少查明瞭問題,但需要一些時間才能修復這.. ..謝謝你的幫助! – Tim 2010-09-24 13:52:33