使用 Hibernate 搜索注释(大部分只是@Field(index = Index.TOKENIZED)
)我已经索引了一些与我的名为“Compound”的持久类相关的字段。我已经使用以下命令对所有索引字段设置了文本搜索MultiFieldQueryParser http://lucene.apache.org/java/2_9_3/api/core/index.html?org/apache/lucene/queryParser/MultiFieldQueryParser.html,到目前为止效果很好。
在已索引和可搜索的字段中有一个名为compoundName 的字段,其示例值:
3-Hydroxyflavone
6,4'-Dihydroxyflavone
当我完整搜索这些值中的任何一个时,将返回相关的复合实例。但是,当我使用部分名称并引入通配符时会出现问题:
- 寻找
3-Hydroxyflav*
仍然给出正确的命中,但是
- 寻找
6,4'-Dihydroxyflav*
找不到任何东西。
现在,由于我对 Lucene / Hibernate 搜索还很陌生,所以我不太确定在哪里看这一点。我认为这可能与'
存在于第二个查询中,但我不知道如何继续。我应该研究 Tokenizers/Analyzers/QueryParsers 还是完全其他的东西?
或者谁能告诉我如何让第二个通配符搜索匹配,最好不破坏多字段搜索行为?
我正在使用 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();