jpountz commented on issue #11799:
URL: https://github.com/apache/lucene/issues/11799#issuecomment-1254691652

   > we want a single Field containing a list of key-value pairs or a json 
formatted
   
   Note that you can add one `FeatureField` field to your Lucene document for 
every key/value pair in your JSON document. The logic of converting from a 
high-level representation like a JSON map into a low-level representation that 
Lucene understands feels like something that could be managed on the 
application side?
   
   Here's a code example that I think does something similar to what you are 
looking for:
   
   ```java
   import org.apache.lucene.document.Document;
   import org.apache.lucene.document.FeatureField;
   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.search.BooleanClause.Occur;
   import org.apache.lucene.search.BooleanQuery;
   import org.apache.lucene.search.IndexSearcher;
   import org.apache.lucene.search.Query;
   import org.apache.lucene.store.ByteBuffersDirectory;
   import org.apache.lucene.store.Directory;
   
   public class LearnedSparseRetrieval {
   
     public static void main(String[] args) throws Exception {
       try (Directory dir = new ByteBuffersDirectory()) {
         try (IndexWriter w = new IndexWriter(dir, new IndexWriterConfig())) {
           {
             Document doc = new Document();
             doc.add(new FeatureField("my_feature", "scientific", 200));
             doc.add(new FeatureField("my_feature", "intellect", 202));
             doc.add(new FeatureField("my_feature", "communication", 235));
             w.addDocument(doc);
           }
           {
             Document doc = new Document();
             doc.add(new FeatureField("my_feature", "scientific", 100));
             doc.add(new FeatureField("my_feature", "communication", 350));
             doc.add(new FeatureField("my_feature", "project", 80));
             w.addDocument(doc);
           }
         }
   
         try (IndexReader reader = DirectoryReader.open(dir)) {
           IndexSearcher searcher = new IndexSearcher(reader);
           Query query = new BooleanQuery.Builder()
               .add(FeatureField.newLinearQuery("my_feature", "scientific", 
24), Occur.SHOULD)
               .add(FeatureField.newLinearQuery("my_feature", "communication", 
50), Occur.SHOULD)
               .build();
           System.out.println(searcher.explain(query, 0));
           System.out.println();
           System.out.println(searcher.explain(query, 0));
         }
       }
     }
   
   }
   ```
   
   which outputs
   
   ```
   16550.0 = sum of:
     4800.0 = Linear function on the my_feature field for the scientific 
feature, computed as w * S from:
       24.0 = w, weight of this function
       200.0 = S, feature value
     11750.0 = Linear function on the my_feature field for the communication 
feature, computed as w * S from:
       50.0 = w, weight of this function
       235.0 = S, feature value
   
   
   19900.0 = sum of:
     2400.0 = Linear function on the my_feature field for the scientific 
feature, computed as w * S from:
       24.0 = w, weight of this function
       100.0 = S, feature value
     17500.0 = Linear function on the my_feature field for the communication 
feature, computed as w * S from:
       50.0 = w, weight of this function
       350.0 = S, feature value
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to