I think you will need to subclass MultiFieldQueryParser so that the proper Query is created when the field is the numeric one. Maybe overriding createFieldQuery().

El 8/10/20 a las 11:48, Stephane Passignat escribió:
Hi,
I'm trying to index numeric, and then to query them using java api and
lucene 8.6. I tried several numeric Field types, but I can't make it
work.
Can someone help me to store numeric in the datastore and then to
query them ?
ThanksStéphane

Here is a simple JUnit test
package test.data;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.io.IOException;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class MTest {
    static Directory index = new RAMDirectory();
    private String query;

    public MTest(String query) {
       this.query = query;
    }

    @Parameterized.Parameters(name = "{0}")
    public static Collection<Object[]> data() {
       Object[][]
             scannedClasses =
             new Object[][]{{"TextField:Client"},
                         {"LongPoint:17"},
                         {"LongPoint:[16 TO 18]"},
                         {"BigIntegerPoint:21"},
                         {"BigIntegerPoint:[20 TO 22]"},
                         {"StringField:Stephane"},
                         {"Date:20200615"},
                         {"Date:[20200614 TO 20200616]"},
                         {"DoublePoint:37"},
                         {"DoublePoint:[37 TO 38]"},};
       return Arrays.asList(scannedClasses);
    }

    @BeforeClass
    public static void init() throws IOException, ParseException {
       StandardAnalyzer analyzer = new StandardAnalyzer();
       IndexWriterConfig config = new IndexWriterConfig(analyzer);
       config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
       try (IndexWriter writer = new IndexWriter(index, config)) {
          final Document doc = new Document();
          doc.add(new TextField("TextField", "Client",
Field.Store.YES));
          doc.add(new StringField("StringField", "Stephane",
Field.Store.YES));
          doc.add(new LongPoint("LongPoint", 17));
          doc.add(new BigIntegerPoint("BigIntegerPoint", new
BigInteger("21")));
          doc.add(new DoublePoint("DoublePoint", new Double(37.7)));
          doc.add(new StringField("Date", "20200615",
Field.Store.YES));
          writer.addDocument(doc);
          writer.commit();
       }
    }

    private void query(Directory index, QueryParser
multiFieldQueryParser, String query) throws ParseException,
IOException {
       System.out.println("query = " + query);
       Query q = multiFieldQueryParser.parse(query);
       int hitsPerPage = 10;
       IndexReader reader = DirectoryReader.open(index);
       IndexSearcher searcher = new IndexSearcher(reader);
       TopDocs docs = searcher.search(q, hitsPerPage);
       ScoreDoc[] hits = docs.scoreDocs;
       Assert.assertEquals(query, 1, hits.length);
    }

    @Test
    public void testString() throws IOException, ParseException {
       StandardAnalyzer analyzer = new StandardAnalyzer();
       final QueryParser multiFieldQueryParser = new
MultiFieldQueryParser(new String[]{"longPoint", "Entity"}, analyzer);
       query(index, multiFieldQueryParser, query);
    }
}



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

Reply via email to