[Info-vax] Solr client on VMS

Arne Vajhøj arne at vajhoej.dk
Wed Dec 25 13:43:42 EST 2024


On 12/6/2024 7:49 PM, Arne Vajhøj wrote:
> I have been looking a bit at Solr recently. For those that don't
> know Solr, then it is a text search engine - or more accurate it
> is a web frontend for the Lucene text search engine. Both
> Solr and Lucene are Apache projects (open source).
> 
> Solr is basically exposing a web API, so anything that can do
> HTTP POST can use Solr. But clients encapsulating the HTTP
> stuff does exist for many languages. On VMS then both JVM languages
> and Python should be able to use a standard client.

Java:

$ type Load.java
import java.io.IOException;

import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;

public class Load {
     private static SolrInputDocument create(int id, String names, 
String moves) {
         SolrInputDocument res = new SolrInputDocument();
         res.addField("id", id);
         res.addField("names", names);
         res.addField("moves", moves);
         return res;
     }
     public static void main(String[] args) throws IOException, 
SolrServerException {
         HttpSolrClient client = new 
HttpSolrClient.Builder("http://arnepc5:8888/solr").build();
         client.deleteByQuery("chessopening", "*:*");
         client.add("chessopening", create(1, "Spanish defense, Ruy 
Lopez", "1. e4, e5, 2. Nf3, Nc6, 3. Bb5,"));
         client.add("chessopening", create(2, "French defense", "1. e4, 
e6, 2. d4, d5,"));
         client.add("chessopening", create(3, "Sicilian defense", "1. 
e4, c5,"));
         client.add("chessopening", create(4, "Queens gambit", "1. d4, 
d5, 2. c4,"));
         client.add("chessopening", create(5, "Dutch defense", "1. d4, 
f5,"));
         client.add("chessopening", create(6, "Reti opening", "1. Nf3, 
d5, 2. c4,"));
         client.commit("chessopening");
         client.close();
     }
}
$ javac -cp solrj/* Load.java
$ java -cp .:solrj/* Load
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for 
further details.
$ type Search.java
import java.io.IOException;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

public class Search {
     private static void dump(HttpSolrClient client, String searchterm) 
throws SolrServerException, IOException {
         System.out.printf("search for : %s\n",  searchterm);
         SolrQuery query = new SolrQuery();
         query.setParam("df", "alltext");
         query.setQuery(searchterm);
         query.addField("names");
         query.addField("moves");
         SolrDocumentList res = client.query("chessopening", 
query).getResults();
         for(SolrDocument doc : res) {
             String names = (String)doc.getFirstValue("names");
             String moves = (String)doc.getFirstValue("moves");
             System.out.printf("  %s - %s\n",  names, moves);
         }
     }
     public static void main(String[] args) throws IOException, 
SolrServerException {
         HttpSolrClient client = new 
HttpSolrClient.Builder("http://arnepc5:8888/solr").build();
         // all
         dump(client, "*:*");
         // one
         dump(client, "names:defense");
         dump(client, "moves:d4");
         // dual
         dump(client, "alltext:defense");
         dump(client, "alltext:d4");
         dump(client, "defense"); // default field
         dump(client, "d4"); // default field
         // boolean
         dump(client, "names:defense moves:d4"); // implicit or
         dump(client, "names:defense AND moves:d4"); // and
         dump(client, "names:defense NOT moves:d4"); // not
         dump(client, "defense d4"); // default field + implicit or
         dump(client, "defense AND d4"); // default field + and
         dump(client, "defense NOT d4"); // default field + not
         // wildcard
         dump(client, "names:def*");
         dump(client, "moves:N*");
         client.close();
     }
}
$ javac -cp solrj/* Search.java
$ java -cp .:solrj/* Search
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for 
further details.
search for : *:*
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
   French defense - 1. e4, e6, 2. d4, d5,
   Sicilian defense - 1. e4, c5,
   Queens gambit - 1. d4, d5, 2. c4,
   Dutch defense - 1. d4, f5,
   Reti opening - 1. Nf3, d5, 2. c4,
search for : names:defense
   French defense - 1. e4, e6, 2. d4, d5,
   Sicilian defense - 1. e4, c5,
   Dutch defense - 1. d4, f5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : moves:d4
   Dutch defense - 1. d4, f5,
   Queens gambit - 1. d4, d5, 2. c4,
   French defense - 1. e4, e6, 2. d4, d5,
search for : alltext:defense
   Sicilian defense - 1. e4, c5,
   Dutch defense - 1. d4, f5,
   French defense - 1. e4, e6, 2. d4, d5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : alltext:d4
   Dutch defense - 1. d4, f5,
   Queens gambit - 1. d4, d5, 2. c4,
   French defense - 1. e4, e6, 2. d4, d5,
search for : defense
   Sicilian defense - 1. e4, c5,
   Dutch defense - 1. d4, f5,
   French defense - 1. e4, e6, 2. d4, d5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : d4
   Dutch defense - 1. d4, f5,
   Queens gambit - 1. d4, d5, 2. c4,
   French defense - 1. e4, e6, 2. d4, d5,
search for : names:defense moves:d4
   Dutch defense - 1. d4, f5,
   French defense - 1. e4, e6, 2. d4, d5,
   Queens gambit - 1. d4, d5, 2. c4,
   Sicilian defense - 1. e4, c5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : names:defense AND moves:d4
   Dutch defense - 1. d4, f5,
   French defense - 1. e4, e6, 2. d4, d5,
search for : names:defense NOT moves:d4
   Sicilian defense - 1. e4, c5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : defense d4
   Dutch defense - 1. d4, f5,
   French defense - 1. e4, e6, 2. d4, d5,
   Queens gambit - 1. d4, d5, 2. c4,
   Sicilian defense - 1. e4, c5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : defense AND d4
   Dutch defense - 1. d4, f5,
   French defense - 1. e4, e6, 2. d4, d5,
search for : defense NOT d4
   Sicilian defense - 1. e4, c5,
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
search for : names:def*
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
   French defense - 1. e4, e6, 2. d4, d5,
   Sicilian defense - 1. e4, c5,
   Dutch defense - 1. d4, f5,
search for : moves:N*
   Spanish defense, Ruy Lopez - 1. e4, e5, 2. Nf3, Nc6, 3. Bb5,
   Reti opening - 1. Nf3, d5, 2. c4,

Arne



More information about the Info-vax mailing list