I'm using Apache solr for work, but I was hoping that it could be easily moved at home (local), but I recently learned that it can be launched with Embedded, so I'll make a note of it.
A full-text search engine library provided by Apache. It features a rich library even in open source with a management screen, hit highlights, facet search, cache, and duplication.
-Solr.xml --solr general settings. Since it was supposed to be run locally, I set "localhost" for host. https://lucene.apache.org/solr/guide/6_6/format-of-solr-xml.html -Solrj --A library for issuing queries to solr on java (see "pom.xml"). -Solr-core --A library for solr core information (see "pom.xml"). -Core folder-A folder that stores the created core data (see "Core folder hierarchy").
pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>7.7.1</version>
</dependency>
This time, I created the following folders under src / main / resources. src/main/resources ┗ solr folder ┣ solr.xml ┗ test_core folder ┗ core.properties (The contents can be empty)
embeddedSolr.java
private static CoreContainer container;
private static SolrClient client;
//Directory for storing setting information
private final static String solrFolder = "src/main/resources/solr";
//solr start
public static void init(String coreName) {
//Read setting information
container = new CoreContainer("src/main/resources/solr");
container.load();
try {
//Specify the core and launch
client = new EmbeddedSolrServer(container, coreName);
} catch (Exception e) {
e.printStackTrace();
}
}
//Add data
public static void add() {
//List for addition
List<SolrInputDocument> docList = new ArrayList<>();
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "1");
doc.addField("content_txt_ja", "Taro bought vegetables.");
docList.add(doc);
doc = new SolrInputDocument();
doc.setField("id", "2");
doc.addField("content_txt_ja", "Jiro sold the fruit.");
docList.add(doc);
doc = new SolrInputDocument();
doc.setField("id", "3");
doc.addField("content_txt_ja", "Saburo plans to buy bread.");
docList.add(doc);
doc = new SolrInputDocument();
doc.setField("id", "4");
doc.addField("content_txt_ja", "Goro doesn't buy anything.");
docList.add(doc);
try {
//Add and commit data.
client.add(docList);
client.commit();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
//data search
public static void select(String keyword) {
//Query creation
SolrQuery query = new SolrQuery();
query.add("q", "content_txt_ja:\""+keyword+"\"");
query.add("fl", "*,score");
log.info("[Solr search] query[{}]", query.toString());
//Search
QueryResponse response = null;
try {
response = client.query(query);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
//Get search results
SolrDocumentList list = response.getResults();
for(SolrDocument doc : list) {
String id = doc.getFieldValue("id").toString();
String text = doc.getFieldValue("content_txt_ja").toString();
String score = doc.getFieldValue("score").toString();
log.info("[Acquisition result] id[{}], text[{}] score[{}]", id, text, score);
}
}
//solr stop
public static void stop() {
container.shutdown();
}
As a result of searching for "buy", the following data was hit.
[Acquisition result] id[1], text[Taro bought vegetables.] score[0.38845786](EmbettedSolrInit.java:111)
[Acquisition result] id[3], text[Saburo plans to buy bread.] score[0.3472057](EmbettedSolrInit.java:111)
[Acquisition result] id[4], text[Goro buys sweets and goes home.] score[0.31387395](EmbettedSolrInit.java:111)
I succeeded in moving it for the time being, so I would like to make a note of Solr's functions while moving it in the future.
Recommended Posts