検索されたすべての用語を使用して Hibernate Search で結果を見つける方法はありますか? つまり、たとえば、「家」などの特定の用語を検索すると、「家」のリストが表示されます。ただし、検索を絞り込んで「家」と「プール」を探したい場合は、「家」または「プール」のリストではなく、「家」と「プール」のリストを取得したいと考えています。 . 私は十分に明確であるかどうかわかりません。したがって、基本的には、複数の単語で検索を実行する必要があり、検索では 1 つだけでなく、すべての単語を考慮する必要があります。それは可能ですか?ありがとう
2989 次
5 に答える
4
検索する用語の文字列配列があると仮定すると、これが必要になる場合があります。
BooleanQuery finalLuceneQuery=new BooleanQuery();
for(String term:terms)
{
TermQuery query = new TermQuery(new Term("your search field", term));
finalLuceneQuery.add(query,BooleanClause.Occur.MUST);
}
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(finalLuceneQuery, <your class>.class);
乾杯。
于 2013-08-26T08:48:31.140 に答える
2
QueryParser を使用して、デフォルトの演算子を AND に設定できます。
QueryParser queryParser = new QueryParser(Version.LUCENE_36, "yourfield",standardAnalyzer);
// query terms should ANDed by default
queryParser.setDefaultOperator(Operator.AND);
Query luceneQuery = queryParser.parse("house pool");
// turn it into an hibernate search query
org.hibernate.search.FullTextQuery hibQuery =
session.createFullTextQuery(luceneQuery, YourClass.class);
于 2013-10-24T12:47:37.007 に答える
2
複数のフィールドで検索する場合、各フィールドに表示されなければならない、必要がある、または指定されていない用語を指定できます。次のコードは、Lucene 4.10.3 に基づいています。
// fields we are interested in
String[] fields = {"description", "content"};
// terms SHOULD appear in description OR MUST appear in content
BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD, BooleanClause.Occur.MUST};
// besides the StandardAnalyzer there are analysers for many languages like
// FrenchAnalyser, RussianAnalyser and so on
Analyzer analyzer = new StandardAnalyzer();
// create a multi field query using parse static method
org.apache.lucene.search.Query luceneQuery =
MultiFieldQueryParser.parse("house pool", fields, flags, analyzer);
// convert to Hibernate query
org.hibernate.search.FullTextQuery hibQuery =
session.createFullTextQuery(luceneQuery, YourClass.class);
JPA を使用している場合は、JPA クエリに変換する必要があります。
// get an EntityManager from your EntityManagerFactory (emf)
javax.persistence.EntityManager em = emf.createEntityManager();
// Convert it to a FullTextEntityManager
org.hibernate.search.jpa.FullTextEntityManager ftem =
org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
// convert it to a JPA query
javax.persistence.Query jpaQuery =
ftem.createFullTextQuery(luceneQuery, YourClass.class);
Lucene クエリを取得するさらに別の方法 (おそらくもっと簡単ですか?):
// fields we are interested in
String[] fields = {"description", "content"};
// besides the StandardAnalyzer there are analysers for many languages like
// FrenchAnalyser, RussianAnalyser and so on
Analyzer analyzer = new StandardAnalyzer();
// to set MUST for all fields we need an instance of the parser
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(fields, analyzer);
mfqp.setDefaultOperator(QueryParser.Operator.AND);
org.apache.lucene.search.Query luceneQuery = mfqp.parse("house pool");
于 2015-01-09T22:57:51.543 に答える