在嵌入式环境下启动Apache Solr
背景 – 背景资料或历史环境。
我使用Apache Solr来处理工作,但我一直希望能在家里(本地)也能轻松运行,最近我了解到它可以通过嵌入式方式启动,所以我将其记录在备忘录中。
Apache Solr是什么?
以下是Apache提供的全文搜索引擎库。其特点是提供了管理界面、高亮显示、Facet搜索、缓存和复制等功能,并且还是一个富有特色的开源库。
準備所需的事物 suǒ xū de shì wù)
・solr.xml – Solr的整体设置。由于假设在本地运行,所以将主机设置为“localhost”。详情请参考:https://lucene.apache.org/solr/guide/6_6/format-of-solr-xml.html
・solrj – 用于在Java上向Solr发送查询的库(请参考“pom.xml”)。
・solr-core – 用于Solr核心信息的库(请参考“pom.xml”)。
・核心文件夹 – 用于存储创建的核心数据的文件夹(请参考“核心文件夹的层次结构”)。
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>
核心文件夹的层次结构
这次在src/main/resources下创建了以下文件夹:
src/main/resources
┗ solr文件夹
┣ solr.xml
┗ test_core文件夹
┗ core.properties(内容可以为空)
您需要等。
private static CoreContainer container;
private static SolrClient client;
// 設定情報を格納するディレクトリ
private final static String solrFolder = "src/main/resources/solr";
// solr起動
public static void init(String coreName) {
// 設定情報を読み込む
container = new CoreContainer("src/main/resources/solr");
container.load();
try {
// コアを指定して立ち上げる
client = new EmbeddedSolrServer(container, coreName);
} catch (Exception e) {
e.printStackTrace();
}
}
// データ追加
public static void add() {
// 追加用リスト
List<SolrInputDocument> docList = new ArrayList<>();
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "1");
doc.addField("content_txt_ja", "太郎は野菜を買った。");
docList.add(doc);
doc = new SolrInputDocument();
doc.setField("id", "2");
doc.addField("content_txt_ja", "次郎はフルーツを売った。");
docList.add(doc);
doc = new SolrInputDocument();
doc.setField("id", "3");
doc.addField("content_txt_ja", "三郎はパンを買う予定。");
docList.add(doc);
doc = new SolrInputDocument();
doc.setField("id", "4");
doc.addField("content_txt_ja", "五郎は何も買わない。");
docList.add(doc);
try {
// データを追加、コミットする。
client.add(docList);
client.commit();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
// データ検索
public static void select(String keyword) {
// クエリ作成
SolrQuery query = new SolrQuery();
query.add("q", "content_txt_ja:\""+keyword+"\"");
query.add("fl", "*,score");
log.info("【Solr検索】query[{}]", query.toString());
// 検索
QueryResponse response = null;
try {
response = client.query(query);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
// 検索結果取得
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("【取得結果】 id[{}], text[{}] score[{}]", id, text, score);
}
}
// solr停止
public static void stop() {
container.shutdown();
}
执行结果
通过搜索”购买”得到以下结果。
【取得結果】 id[1], text[太郎は野菜を買った。] score[0.38845786] (EmbettedSolrInit.java:111)
【取得結果】 id[3], text[三郎はパンを買う予定。] score[0.3472057] (EmbettedSolrInit.java:111)
【取得結果】 id[4], text[五郎はお菓子を買って、家に帰る。] score[0.31387395] (EmbettedSolrInit.java:111)
暫時獲得了成功,現在將在持續運行的同時,記錄下Solr的功能。