@Sheng I am using StandardAnalyzer @Ahmet I know using the query object will simply work. But I hae a requirement where the user insert the whole String and i want to return the doc which exactly match the given text
On Fri, Jun 19, 2015 at 9:23 PM, Sheng <sheng...@gmail.com> wrote: > 1. What is the analyzer are you using for indexing ? > 2. you cannot fuzzy match field name - that for sure will throw exception > 3. I would start from a simple, deterministic query object to rule out all > unlikely possibilities first before resorting to parser to generate that > for you. > > > On Fri, Jun 19, 2015 at 10:45 AM, Ahmet Arslan <iori...@yahoo.com.invalid> > wrote: > > > Hi, > > > > Why don't you create your query with API? > > > > Term term = new Term("B", "1 2"); > > Query query = new TermQuery(term); > > > > Ahmet > > > > > > > > On Friday, June 19, 2015 9:31 AM, Gimantha Bandara <giman...@wso2.com> > > wrote: > > Correction.. > > > > second time I used the following code to test. Then I got the above > > IllegalStateException issue. > > > > w = new QueryParser(null, new WhitespaceAnalyzer()).parse("*B:\"1 2\"*"); > > > > not the below one. > > > > w = new QueryParser(null, new WhitespaceAnalyzer()).parse("*\**"B:1 > 2\"*"); > > > > Can someone point out the correct way to query for StringFields? > > > > Thanks, > > > > On Thu, Jun 18, 2015 at 2:12 PM, Gimantha Bandara <giman...@wso2.com> > > wrote: > > > > > Hi all, > > > > > > I have created lucene documents like below. > > > > > > Document doc = new Document(); > > > doc.add(new TextField("A", "1", Field.Store.YES)); > > > doc.add(new StringField("B", "1 2 3", Field.Store.NO)); > > > doc.add(new TextField("Publish Date", "2010", Field.Store.NO)); > > > indexWriter.addDocument(doc); > > > > > > doc = new Document(); > > > doc.add(new TextField("A", "2", Field.Store.YES)); > > > doc.add(new StringField("B", "1 2", Field.Store.NO)); > > > doc.add(new TextField("Publish Date", "2010", Field.Store.NO)); > > > indexWriter.addDocument(doc); > > > > > > doc = new Document(); > > > doc.add(new TextField("A", "3", Field.Store.YES)); > > > doc.add(new StringField("B", "1", Field.Store.NO)); > > > doc.add(new TextField("Publish Date", "2012", Field.Store.NO)); > > > indexWriter.addDocument(doc); > > > > > > Now I am using the following code to test the StringField behavior. > > > > > > Query w = null; > > > try { > > > w = new QueryParser(null, new > > WhitespaceAnalyzer()).parse("B:1 > > > 2"); > > > } catch (ParseException e) { > > > e.printStackTrace(); > > > } > > > TopScoreDocCollector collector = > TopScoreDocCollector.create(100, > > > true); > > > searcher.search(w, collector); > > > ScoreDoc[] hits = collector.topDocs(0).scoreDocs; > > > Document indexDoc; > > > for (ScoreDoc doc : hits) { > > > indexDoc = searcher.doc(doc.doc); > > > System.out.println(indexDoc.get("A")); > > > } > > > > > > Above code should print only the second document's 'A' value as it is > the > > > only one where 'B' has value '1 2'. But it returns the 3rd document. > So I > > > tried using double quotation marks for 'B' value as below. > > > > > > w = new QueryParser(null, new WhitespaceAnalyzer()).parse("\"B:1 2\""); > > > > > > It gives the following error. > > > > > > Exception in thread "main" java.lang.IllegalStateException: field "B" > was > > > indexed without position data; cannot run PhraseQuery (term=1) > > > at > > > > > > org.apache.lucene.search.PhraseQuery$PhraseWeight.scorer(PhraseQuery.java:277) > > > at org.apache.lucene.search.Weight.bulkScorer(Weight.java:131) > > > at > > > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:618) > > > at > > > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:309) > > Is > > > my searching query wrong? (Note: I am using whitespace analyzer > > everywhere) > > > > > > -- > > > Gimantha Bandara > > > Software Engineer > > > WSO2. Inc : http://wso2.com > > > Mobile : +94714961919 > > > > > > > > > > > > > -- > > Gimantha Bandara > > Software Engineer > > WSO2. Inc : http://wso2.com > > Mobile : +94714961919 > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > > For additional commands, e-mail: java-user-h...@lucene.apache.org > > > > > -- Gimantha Bandara Software Engineer WSO2. Inc : http://wso2.com Mobile : +94714961919