3
我正在使用SOLR作爲其搜索引擎的Java webapp(Spring 3.x)。我希望能夠攔截Lucene查詢,並根據查找服務(如果成功使用範圍搜索,則搜索常規字段)將兩個索引字段中的任一個替換爲「虛擬」搜索字段。在執行搜索之前操作Lucene查詢
例如,給予相同的field0:foo (field1:bar OR field1:bash) AND field2:bing
查詢(FIELD1是一個虛擬域)
操縱查詢來獲取field0:foo (field3:[42 TO 45] OR field4:bash) AND field2:bing
因此,與只使用一個REG前的想法玩弄後,我決定看看Lucene類,看我是否可以重新使用現有的代碼。我希望能夠獲得查詢的解析版本,以遍歷子句,尋找特定的字段進行操作。然後重新生成查詢字符串並將其傳遞給SOLR。
我有密切的使用Lucene的QueryParser但我只能得到的條款,而不是布爾運算符:
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
QueryParser queryParser = new QueryParser(Version.LUCENE_30, "text", analyzer);
try {
Query query = queryParser.parse(queryString);
Set<Term> terms = new TreeSet<Term>();
query.extractTerms(terms);
for (Term t : terms) {
logger.info("Term - field:" + t.field() + " | text:" + t.text());
}
} catch (ParseException ex) {
logger.warn(ex.getMessage(), ex);
}
我已經看過了BooleanQuery,但還沒有運氣有兩種。請幫忙。
爲什麼要擴展MultiFieldQueryParser VS的QueryParser?他們都實現了一個getFieldQuery()方法... – nickdos
@nickdos:我個人使用'MultiFieldQueryParser',這就是我所說的。如果這是你喜歡的,你當然可以使用普通的。 – Xodarap
感謝Xodarap,我一開始並不確定你的回答(不知道Lucene如何調用getFieldQuery())。但給了它一下,它完美的工作。 – nickdos