You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by sxam <sx...@yahoo.com> on 2012/06/30 22:55:13 UTC

Searching both phrase and it's words

Hi,
Suppose we have a query "balcony table". I want results to be returned by
exact match (first priority) and by single words matching as well (for
"balcony" or for "table"). So currently my solution is:

Analyzer analyzer = new SnowballAnalyzer("English",
StopAnalyzer.ENGLISH_STOP_WORDS_SET);
            QueryParser contentParser = new QueryParser(Version.LUCENE_29,
"content", analyzer);

            Query phraseContentQuery =
contentParser.Parse("\""+QueryParser.Escape(luceneQuery)+"\"");

            if (phraseContentQuery is PhraseQuery)
            {
                ((PhraseQuery)phraseContentQuery).SetSlop(100);
            }

            Query simpleParsedQuery =
contentParser.Parse(QueryParser.Escape(luceneQuery));

            BooleanQuery boolQuery = new BooleanQuery();

            boolQuery.Add(simpleParsedQuery, BooleanClause.Occur.SHOULD);
            boolQuery.Add(phraseContentQuery, BooleanClause.Occur.SHOULD);

            TopDocs docs = searcher.Search(boolQuery, 1500);
            ScoreDoc[] hits = docs.scoreDocs;

Is it the right way?
Is there another way, without running two queries (simpleParsedQuery and
phraseContentQuery)?

Thanks!

Maxim

--
View this message in context: http://lucene.472066.n3.nabble.com/Searching-both-phrase-and-it-s-words-tp3992276.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Re: Searching both phrase and it's words

Posted by Jack Krupansky <ja...@basetechnology.com>.
You didn't show us your "luceneQuery", but the gist of the solution is to 
use MUST clauses for each of the individual terms and then a SHOULD of the 
phrase. You can add an additional boost to the phrase, but lucene should 
naturally boost documents containing the phrase.

-- Jack Krupansky

-----Original Message----- 
From: sxam
Sent: Saturday, June 30, 2012 3:55 PM
To: java-user@lucene.apache.org
Subject: Searching both phrase and it's words

Hi,
Suppose we have a query "balcony table". I want results to be returned by
exact match (first priority) and by single words matching as well (for
"balcony" or for "table"). So currently my solution is:

Analyzer analyzer = new SnowballAnalyzer("English",
StopAnalyzer.ENGLISH_STOP_WORDS_SET);
            QueryParser contentParser = new QueryParser(Version.LUCENE_29,
"content", analyzer);

            Query phraseContentQuery =
contentParser.Parse("\""+QueryParser.Escape(luceneQuery)+"\"");

            if (phraseContentQuery is PhraseQuery)
            {
                ((PhraseQuery)phraseContentQuery).SetSlop(100);
            }

            Query simpleParsedQuery =
contentParser.Parse(QueryParser.Escape(luceneQuery));

            BooleanQuery boolQuery = new BooleanQuery();

            boolQuery.Add(simpleParsedQuery, BooleanClause.Occur.SHOULD);
            boolQuery.Add(phraseContentQuery, BooleanClause.Occur.SHOULD);

            TopDocs docs = searcher.Search(boolQuery, 1500);
            ScoreDoc[] hits = docs.scoreDocs;

Is it the right way?
Is there another way, without running two queries (simpleParsedQuery and
phraseContentQuery)?

Thanks!

Maxim

--
View this message in context: 
http://lucene.472066.n3.nabble.com/Searching-both-phrase-and-it-s-words-tp3992276.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org 


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org