随着互联网的发展和信息爆炸式增长,我们现在能够访问和获取的信息量非常大,无论是从网页、文献还是日常生活中获取的信息,都需要一种高效的方式来处理和管理。全文搜索是一种非常高效和常用的方式,它可以通过关键词或短语的方式定位和提取我们需要的信息,而 solr 就是一种非常适合用于全文搜索开发的工具。
本文将介绍 solr 的基本概念以及在 java api 开发中如何使用 solr 进行全文搜索。
一、solr 简介
solr 本质上是一款开源的 enterprise search platform,它基于 apache lucene 的 java 库,并提供了一些方便的 rest apis。根据 solr 官方的介绍,其主要包括以下特性:
全文搜索实时搜索网站搜索分布式搜索数据库集成多种文件格式的解析多种文件格式的导出外部配置作为一种企业级的搜索平台,solr 提供了非常完善的搜索功能和灵活的配置方式,这使得我们在实际开发中可以很方便地进行搜索模块的开发。下面我们将重点介绍在 java api 开发中如何使用 solr 进行全文搜索。
二、使用 solr 进行全文搜索
2.1 安装 solr
首先,我们需要在本地环境或服务器上安装 solr。solr 官方提供了非常方便的方式来安装和运行 solr:
下载 solr 地址:https://lucene.apache.org/solr/downloads.html。解压文件:tar -zxvf solr-x.x.x.zip。进入解压文件夹:cd solr-x.x.x。启动 solr:bin/solr start。2.2 创建 solr core 并定义 schema
solr core 是 solr 中一个非常核心的概念,它相当于一个独立的搜索环境,包含数据的索引和搜索请求的处理。在 solr 中,我们可以创建多个 core,每个 core 都可以有独立的配置和数据集。
在 solr 中,我们需要首先创建一个 core,然后再定义用于搜索的 schema。schema 定义了数据的字段、类型、索引等属性,这些属性将影响搜索的效率和准确度。
可以使用 solr 自带的 schema or 用户自定义 schema 来定义搜索所需的字段属性,这里介绍使用 solr 的默认 schema。
使用 solr 自有默认schema:
创建 core:
bin/solr create_core -c <core name>
清除所有创建了的字段:
curl http://localhost:8983/solr/<core name>/schema -h 'content-type:application/json' -d '{"delete-all-fields":{}}'
添加字段:
curl http://localhost:8983/solr/<core name>/schema -h 'content-type:application/json' -d ' { "add-field":{ "name":"field_name", "type":"string", "stored":true } }'
重启solr服务使用用户自定义schema:
用户可以自定义schema以满足不同的应用需求,solr提供了schema api。为创作者提供了简便的schema添加。
创建 core:
bin/solr create_core -c <core name>
添加字段:
添加字段类型:
向 solr server 发送post 请求,content_type 设置为application/json{ "add-field-type": { "name":"test_fieldtype","class":"solr.textfield","indexanalyzer":{ "tokenizer":{ "class":"solr.standardtokenizerfactory" },"filters":[ { "class":"solr.stopfilterfactory", "ignorecase":true, "words":"stopword.txt", "format":"snowball", "enablepositionincrements":true },{ "class":"solr.snowballporterfilterfactory", "language":"english" } ], "queryanalyzer":{ "tokenizer":{ "class":"solr.standardtokenizerfactory" },"filters":[ { "class":"solr.stopfilterfactory", "ignorecase":true, "words":"stopword.txt", "format":"snowball", "enablepositionincrements":true },{ "class":"solr.snowballporterfilterfactory", "language":"english" } ] } } }
添加字段(title):{ "add-field": { "name": "title", "type": "text_en", "stored": true }}
字段添加成功后会返回回应。
在solr config中指定这个schema:
进入${core}/conf目录中修改solrconfig.xml,添加以下代码:
<schemafactory class="classicindexschemafactory"/><schema name="schema_name" version="1.5"> <field name="title" type="text_en" indexed="true" stored="true" /></schema>
二、在 java api 中使用 solr 进行全文搜索
接下来,我们将介绍如何在 java web 应用程序中使用 solr 的 java api 进行全文搜索。
添加 solrj 依赖在 maven 项目中,我们需要添加 solrj 依赖,solr 官方提供了非常方便的依赖:
<dependency> <groupid>org.apache.solr</groupid> <artifactid>solr-solrj</artifactid> <version>8.2.0</version></dependency>
在代码中使用 solrj 进行搜索在 java 代码中,我们可以使用 solrj 提供的 queryresponse 和 solrclient 来进行搜索操作。查询的数据都可以被视为键值对。
首先,我们需要创建 solrclient 的实例。在 solrj 中,solrclient 是 solr 的客户端,提供了直接调用 solr rest api 的方法。
string solrurl = "http://localhost:8983/solr/core_name";solrclient solr = new httpsolrclient.builder(solrurl).build();
然后,我们需要创建一个 solrquery 对象,这个对象是用来设置搜索参数的,其中包括搜索关键词、排序规则、过滤条件等。
solrquery query = new solrquery();query.setquery("keyword");query.setstart(0);query.setrows(10);query.setsort("sort_field", solrquery.order.asc);query.addfilterquery("filter_field:filter_value");
最后,我们可以通过 solr.query(query) 方法来执行搜索,返回的 queryresponse 中包含了搜索结果和相关的元数据信息。我们需要通过 response.getresults() 方法来获取搜索结果列表。
queryresponse response = solr.query(query);solrdocumentlist results = response.getresults();
在实际开发中,我们还可以根据需要对搜索结果进行二次处理,比如将结果转换为 json 格式或 java 对象。
for (solrdocument result : results) { string id = (string) result.getfieldvalue("id"); string title = (string) result.getfieldvalue("title"); string content = (string) result.getfieldvalue("content"); // 将搜索结果转换为 java 实体类 searchresult item = new searchresult(id, title, content); // 或将搜索结果转换为 json 字符串 string json = new objectmapper().writevalueasstring(result);}
以上就是在 java api 开发中使用 solr 进行全文搜索的基本过程。solr 提供了非常完善的搜索功能和 java api 支持,使得我们可以轻松开发出高效、准确的搜索模块,为用户提供更好的搜索体验。
以上就是java api 开发中使用 solr 进行全文搜索的详细内容。