使用 Hibernate Search Annotations(大部分只是@Field(index = Index.TOKENIZED)
)我已经索引了一些与我的一个名为 Compound 的持久类相关的字段。我已经使用 对所有索引字段设置了文本搜索,MultiFieldQueryParser
到目前为止效果很好。
在索引和可搜索的字段中,有一个名为 CompoundName 的字段,其中包含示例值:
3-Hydroxyflavone
6,4'-Dihydroxyflavone
当我完全搜索这些值中的任何一个时,都会返回相关的 Compound 实例。但是,当我使用部分名称并引入通配符时会出现问题:
- 搜索
3-Hydroxyflav*
仍然给出正确的命中,但是 - 搜索
6,4'-Dihydroxyflav*
未能找到任何东西。
现在由于我对 Lucene / Hibernate-search 很陌生,我不太确定在哪里看这一点。我认为这可能与'
第二个查询中的当前有关,但我不知道如何继续.. 我应该完全研究 Tokenizers / Analyzers / QueryParsers 还是其他东西?
或者谁能告诉我如何让第二个通配符搜索匹配,最好不要破坏多字段搜索行为?
我正在使用 Hibernate-Search 3.1.0.GA 和 Lucene-core 2.9.3。
一些相关的代码位来说明我目前的方法:
索引 Compound 类的相关部分:
@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();