Я использую Lucene 3.5 для запуска запроса, в котором мне нужно сопоставить запрос, основанный на трех предыдущих критериях.Например, я делаю booleanQuery для A = A, B = B, C = C, прежде чем выполнить запрос по ключевому слову.У меня проблема в том, что Lucene всегда возвращает один результат и повторяет этот результат снова и снова в списке.Вот мой код.
public List<Parts> performSearch(String A, String B, String C, String keyWord)thows IOException{
List<Parts> list = new ArrayList<Parts>();
int hitsPerPage = 5;
BooleanQuery temp = new BooleanQuery();
BooleanQuery query = new BooleanQuery();
Query aquery = new TermQuery(new Term("A", A);
Query bquery = new TermQuery(new Term("B", B);
Query cquery = new TermQuery(new Term("C", C);
Query keyquery = null;
try{
keyquery = parser.parse(keyword);
}catch(Exception e){
e.printStackTrace;
}
temp.add(aquery, Occur.MUST);
temp.add(bquery, Occur.MUST);
temp.add(cquery, Occur.MUST);
temp.add(keyquery, Occur.SHOULD);
query.add(temp, Occur.MUST);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(query, collector);
ScoreDoc[] score = collector.topDocs().scoreDocs;
for(ScoreDco scoreDoc: score){
...put into a list
}
return list;
По какой-то причине это только получение первого документа, у которого есть совпадение, и помещение его в список пять раз (hitPerPage).Мне нужно, чтобы вернуть все соответствующие документы и вернуть их.Что я делаю не так?
Спасибо,