0

0

Java API 开发中使用 Solr 进行全文搜索

WBOY

WBOY

发布时间:2023-06-18 10:41:19

|

1683人浏览过

|

来源于php中文网

原创

随着互联网的发展和信息爆炸式增长,我们现在能够访问和获取的信息量非常大,无论是从网页、文献还是日常生活中获取的信息,都需要一种高效的方式来处理和管理。全文搜索是一种非常高效和常用的方式,它可以通过关键词或短语的方式定位和提取我们需要的信息,而 solr 就是一种非常适合用于全文搜索开发的工具。

本文将介绍 Solr 的基本概念以及在 Java API 开发中如何使用 Solr 进行全文搜索。

一、Solr 简介

Solr 本质上是一款开源的 enterprise search platform,它基于 Apache Lucene 的 Java 库,并提供了一些方便的 REST APIs。根据 Solr 官方的介绍,其主要包括以下特性:

  • 全文搜索
  • 实时搜索
  • 网站搜索
  • 分布式搜索
  • 数据库集成
  • 多种文件格式的解析
  • 多种文件格式的导出
  • 外部配置

作为一种企业级的搜索平台,Solr 提供了非常完善的搜索功能和灵活的配置方式,这使得我们在实际开发中可以很方便地进行搜索模块的开发。下面我们将重点介绍在 Java API 开发中如何使用 Solr 进行全文搜索。

立即学习Java免费学习笔记(深入)”;

二、使用 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:

  1. 创建 core:

    bin/solr create_core -c <core name>
  2. 清除所有创建了的字段:

    curl http://localhost:8983/solr/<core name>/schema -H 'Content-type:application/json' -d '{"delete-all-fields":{}}'
  3. 添加字段:

    多奥淘宝客程序API免费版 F8.0
    多奥淘宝客程序API免费版 F8.0

    多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了

    下载
    curl http://localhost:8983/solr/<core name>/schema -H 'Content-type:application/json' -d '
     {
       "add-field":{
          "name":"field_name",
          "type":"string",
          "stored":true
        }
     }'
  4. 重启Solr服务

使用用户自定义Schema:

用户可以自定义Schema以满足不同的应用需求,Solr提供了Schema API。为创作者提供了简便的Schema添加。

  1. 创建 core:

    bin/solr create_core -c <core name>
  2. 添加字段:

    • 添加字段类型:
      向 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
         }
    }

    字段添加成功后会返回回应。

  3. 在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 进行全文搜索。

  1. 添加 SolrJ 依赖

在 Maven 项目中,我们需要添加 SolrJ 依赖,Solr 官方提供了非常方便的依赖:

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>8.2.0</version>
</dependency>
  1. 在代码中使用 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 支持,使得我们可以轻松开发出高效、准确的搜索模块,为用户提供更好的搜索体验。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

404

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1945

2024.04.01

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.9万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.3万人学习

Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号