I am using SpanTerm Query for searching exact phrase in lucene. But it doesnt seem to work. Here is my code.
Indexing
IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), false,IndexWriter.MaxFieldLength.UNLIMITED);
doc.add(new Field("contents", sb.toString(), Field.Store.YES, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("imageid", imageDocument.getImageId(), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("title", imageDocument.getTitle(), Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("country", imageDocument.getCountry(), Field.Store.YES, Field.Index.NOT_ANALYZED));
write.addDocument(doc);
Searching
String sentence = searchParameters.get("searchExactWord");
String[] words = sentence.split(" ");
String queryNoWord = "";
int i = 0;
SpanTermQuery [] clause = new SpanTermQuery[words.length];
for (String word : words)
{
clause[i] = new SpanTermQuery(new Term("contents",word));
i++;
}
SpanNearQuery query = new SpanNearQuery(clause, 0, true);
booleanQuery.add(query, BooleanClause.Occur.MUST);
Please guide me if I am doing it wrong???
Prateek
Try a
PhraseQuery
instead:Edit: I think you have a different problem. What other parts are there to your
booleanQuery
? Here's a full working example of searching for a phrase:For version 4.6.0 Indexing:
Searching for exact phrase (given in variable keyword):
Note for the use of "setPhraseSlop(0) and createPhraseQuery()
Use Lucene Query Builder, and give double quotes around the search string. It works for exact phrase search.
Reference: http://www.lucenetutorial.com/lucene-query-builder.html