Sounds to me that all you need is to AND rather than OR your search terms.

        QueryParser qp = new QueryParser("keywords", analyzer);
        qp.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
        Query q = qp.parse(words);

where analyzer is just the standard one.

Or search for +MAIN +BOARD.  Or MAIN AND BOARD.


--
Ian.


On 13 Jul 2005 12:18:44 -0000, Rahul D Thakare
<[EMAIL PROTECTED]> wrote:
>  
> Hi,
> 
>  We are using doc.add(Field.Text("keywords",keywords)); to add the keywords 
> to the document, where keywords is comma separated keywords string.
> Lucene seems to tokenize the keywords with multiple words like(MAIN BOARD) as 
> different keywords(ie as MAIN and BOARD). Tokenization is based on comma and 
> space...So if we search for "MAIN BOARD", documents having keywords like 
> "MAIN LOGIC", "MAIN PARTS", etc also show up
> 
> If one searches for "MAIN BOARD", we want get only the documents have "MAIN 
> BOARD".  How to do this ?
> 
> To achieve this we used doc.add(Field.Keyword("keywords", keywords)); and 
> while searching
> we cannot use standard analyzer, while searching, as divides the keywords if 
> we search keywords having space... so we wrote an 
> KeywordAnalyser(KeywordAnalyzer is basically returns only one single token) 
> as given below.
> 
> /**
>  * Tokenizes the entire stream as single token
>  */
> 
>  public class KeywordAnalyzer extends Analyzer
>  {
>          public TokenStream tokenStream(String fieldName, final Reader reader)
>          {
>                  return new TokenStream(){
>                          private boolean done;
>                          private final char[] buffer = new char[1024];
>                          public Token next() throws IOException
>                          {
>                                  if(!done)
>                                  {
>                                          done = true;
>                                          StringBuffer buffer = new 
> StringBuffer();
>                                          int length = 0;
>                                          while(true)
>                                          {
>                                                  length = 
> reader.read(this.buffer);
>                                                  if(length == -1) break;
> 
>                                                  
> buffer.append(this.buffer,0,length);
>                                          }
>                                          String text = buffer.toString();
>                                          return new 
> Token(text.toUpperCase(),0,text.length());
>                                  }
>                                  return null;
>                          }
>                  };
>          }
>  }
> 
> Which solve the above said problem, but we are not able to the wild card 
> searchs like MAIN*, etc.
> 
> We need both the functionality ie.
> 1.  if user searches for MAIN BOARD, should get only documents that contain 
> MAIN BOARD and not MAIN LOGIC, MAIN, MAIN PART etc.
> 2. User should be able to do the wild card search like MAIN*, etc and get the 
> desired documents.
> 
> Please let us know, how we should do the indexing ? and which analyzer to use 
> to do the search ?
> 
> thanks
> Rahul...
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to