Lucene Reverse Phrase Search

2019-09-10 11:36发布

问题:

If I want to search for Keyword "Error Message" , Can lucene be able to lend me results matching "Error Message" and "Message Error". Currenlty i am getting results matching "Error Message" Only. I am using Standard Analyser and Query Parser for searching a Keyword.

回答1:

Use a PhraseQuery with slop > 0. From the javadoc:

Sets the number of other words permitted between words in query phrase. If zero, then this is an exact phrase search. For larger values this works like a WITHIN or NEAR operator. The slop is in fact an edit-distance, where the units correspond to moves of terms in the query phrase out of position. For example, to switch the order of two words requires two moves (the first move places the words atop one another), so to permit re-orderings of phrases, the slop must be at least two.

More exact matches are scored higher than sloppier matches, thus search results are sorted by exactness.

The slop is zero by default, requiring exact matches.



回答2:

There isn't anything that will do quite that, other than doing it as a search for "Error Message" OR "Message Error".

But if you search for

Title:(Error AND Message)

then you'll get everything where the title matches "Error" and "Message".

One key point, though: if you're programmatically constructing a Lucene query, you really shouldn't be using QueryParser. You should be using a QueryBuilder to construct it structurally. QueryParser is only for human-generated queries that a user might type into your application.