赞
踩
搜索引擎是指一个庞大的互联网资源数据库,如网页,新闻组,程序,图像等。它有助于在万维网上定位信息。用户可以通过以关键字或短语的形式将查询传递到搜索引擎中来搜索信息。 搜索引擎然后搜索其数据库并向用户返回相关链接。
步骤 | 标题或名称 | 描述 |
---|---|---|
1 | 获取原始内容 | 任何搜索应用程序的第一步是收集要进行搜索的目标内容。 |
2 | 构建文档 | 从原始内容构建文档,让搜索应用程序可以很容易地理解和解释。 |
3 | 分析文档 | 在索引开始之前,将对文档进行分析。 |
4 | 索引文档 | 当文档被构建和分析后,下一步是对它们建立索引,以便可以基于特定键而不是文档的全部内容来检索该文档。索引类似于在书开始页或末尾处的目录索引,其中常见单词以其页码显示,使得这些单词可以快速跟踪,而不是搜索整本书。 |
5 | 用于搜索的用户接口 | 当索引数据库就绪,应用程序可以执行搜索操作。 为了帮助用户进行搜索,应用必须提供用户接口,用户可以在其中输入文本并启动搜索过程 |
6 | 构建查询 | 当用户做出搜索文本的请求,应用程序应该使用该文本来准备查询对象,然后可以使用该查询对象来查询索引数据库以获得相关的细节。 |
7 | 搜索查询 | 使用查询对象,检查索引数据库以获取相关详细信息和内容文档。 |
8 | 渲染结果 | 当收到所需的结果,应用程序应决定如何使用其用户界面向用户显示结果。 |
I. Solr 下载并解压
II. 启动
solr start
III. 验证
浏览器输入http://localhost:8983/
Solr的主要构建块(组件)
I. 后台启动
solr start
II. 停止
solr stop -all
III. 前台启动
solr start -f
IV. 另一个端口上启动Solr
solr start -p 8081
V. 重新启动Solr
solr start -p 8081
VI. Solr 状态
solr status
VII. Solr 帮助
solr -help
VIII. 指定端口停止
solr stop -p 8081
核心是Lucene索引的运行实例,包含使用它所需的所有Solr配置文件。我们需要创建一个Solr Core来执行索引和分析等操作。Solr应用程序可以包含一个或多个核心。 如果需要,Solr应用程序中的两个核心可以相互通信。
I. create 命令创建
solr create -c solr_sample
II. create_core创建
solr create_core -c my_core
参数:
http://localhost:8983/solr/#/
后可看到存在两个核心了
III. 删除核心
solr delete -c my_core
IV. 控制台创建
Core Admin -> Add Core
索引是系统地排列文档或(其他实体)。索引使用户能够在文档中快速地查找信息。
在Apache Solr中,我们可以索引(添加,删除,修改)各种文档格式,如xml,csv,pdf等。可以通过几种方式向Solr索引添加数据。
I. Post命令添加文档
Solr在其bin/目录中有一个post命令(Windows中无法使用)。使用这个命令,可以在Apache Solr中索引各种格式的文件。
\solr-7.3.0\example\exampledocs\
目录下的post.jar拷贝到\solr-7.3.0\bin
中, 使用命令执行添加文档java -Dtype=text/csv -Dc=solr_sample -jar post.jar C:\Users\Administrator\Desktop\sample.csv
成功提示:
solr-7.3.0\example\exampledocs
下的book.csv
http://localhost:8983/solr/#/
, 选择solr_sample核心,点击Query->Execute Query 在右侧会显示出数据
wt
选项可选择
III. Web界面添加文档
- {
- "id": "001",
- "name": "Ram",
- "age": 53,
- "Designation": "Manager",
- "Location": "Hyderabad"
- },
- {
- "id": "002",
- "name": "Robert",
- "age": 43,
- "Designation": "SR.Programmer",
- "Location": "Chennai"
- },
- {
- "id": "003",
- "name": "Rahim",
- "age": 25,
- "Designation": "JR.Programmer",
- "Location": "Delhi"
- }
IV. Java Api 添加文档
导包: 将\solr-7.3.0\dist\solrj-lib\
路径下的jar包全部引入工程,\solr-7.3.0\dist\
目录下的solr-solrj-7.3.0.jar引入工程,将\solr-7.3.0\example\resources\
路径下的log4j.properties复制到工程src目录下
代码
- /**
- * Solr Java Api 测试
- * @author mazaiting
- */
- public class SolrTest {
- // Solr链接
- public static final String url = "http://localhost:8983/solr/solr_sample";
-
- /**
- * 添加Document
- * @throws IOException
- * @throws SolrServerException
- */
- @Test
- public void addDocTest() throws SolrServerException, IOException {
- // 创建Solr客户端
- SolrClient solrClient = new HttpSolrClient.Builder(url).build();
- // 准备Solr文档
- SolrInputDocument document = new SolrInputDocument();
- // 添加字段
- document.addField("id", "022");
- document.addField("name", "mazaiting");
- document.addField("age", "24");
- document.addField("addr", "中国科学院理化研究所");
-
- // 添加文档到Solr
- solrClient.add(document);
-
- // 保存修改
- solrClient.commit();
- System.out.println("Documents added.");
- }
-
- }
测试结果
I. 数据
- <add>
- <doc>
- <field name = "id">001</field>
- <field name = "first name">Rajiv</field>
- <field name = "last name">Reddy</field>
- <field name = "phone">9848022337</field>
- <field name = "city">Hyderabad</field>
- </doc>
- <doc>
- <field name = "id">002</field>
- <field name = "first name">Siddarth</field>
- <field name = "last name">Battacharya</field>
- <field name = "phone">9848022338</field>
- <field name = "city">Kolkata</field>
- </doc>
- <doc>
- <field name = "id">003</field>
- <field name = "first name">Rajesh</field>
- <field name = "last name">Khanna</field>
- <field name = "phone">9848022339</field>
- <field name = "city">Delhi</field>
- </doc>
- <doc>
- <field name = "id">004</field>
- <field name = "first name">Preethi</field>
- <field name = "last name">Agarwal</field>
- <field name = "phone">9848022330</field>
- <field name = "city">Pune</field>
- </doc>
- <doc>
- <field name = "id">005</field>
- <field name = "first name">Trupthi</field>
- <field name = "last name">Mohanthy</field>
- <field name = "phone">9848022336</field>
- <field name = "city">Bhuwaeshwar</field>
- </doc>
- <doc>
- <field name = "id">006</field>
- <field name = "first name">Archana</field>
- <field name = "last name">Mishra</field>
- <field name = "phone">9848022335</field>
- <field name = "city">Chennai</field>
- </doc>
- </add>
java -Dtype=text/xml -Dc=solr_sample -jar post.jar C:\Users\Administrator\Desktop\sample.xml
I. 数据
- <add>
- <doc>
- <field name = "id">001</field>
- <field name = "first name" update = "set">Raj</field>
- <field name = "last name" update = "add">Malhotra</field>
- <field name = "phone" update = "add">9000000000</field>
- <field name = "city" update = "add">Delhi</field>
- </doc>
- </add>
唯一的区别是这里使用字段的一个update属性。
II. 命令
java -Dtype=text/xml -Dc=solr_sample -jar post.jar C:\Users\Administrator\Desktop\update.xml
I. 数据
- <delete>
- <id>003</id>
- <id>005</id>
- </delete>
II. Post命令
java -Dtype=text/xml -Dc=solr_sample -jar post.jar C:\Users\Administrator\Desktop\delete.xml
III. 删除字段
- <delete>
- <query>city:Chennai</query>
- </delete>
IV. 删除所有文档
- <delete>
- <query>*:*</query>
- </delete>
V. Java Api
- /**
- * Solr Java Api 测试
- * @author mazaiting
- */
- public class SolrTest {
- // Solr链接
- public static final String url = "http://localhost:8983/solr/solr_sample";
-
- /**
- * 删除所有文档
- * @throws IOException
- * @throws SolrServerException
- */
- @Test
- public void delAllDocTest() throws SolrServerException, IOException {
- // 创建客户端
- SolrClient solrClient = new HttpSolrClient.Builder(url).build();
-
- // 从Solr中删除文档
- solrClient.deleteByQuery("*");
-
- // 提交
- solrClient.commit();
- System.out.println("Documents deteled");
- }
- }
I. 代码
- /**
- * Solr Java Api 测试
- * @author mazaiting
- */
- public class SolrTest {
- // Solr链接
- public static final String url = "http://localhost:8983/solr/solr_sample";
-
- /**
- * 检索数据
- * @throws IOException
- * @throws SolrServerException
- */
- @Test
- public void retrieveDataTest() throws SolrServerException, IOException {
- // 创建客户端
- SolrClient solrClient = new HttpSolrClient.Builder(url).build();
- // 创建查询
- SolrQuery query = new SolrQuery();
- // 设置查询条件
- query.setQuery("*:*");
- // 添加查询字段
- query.addField("*");
- // 执行查询
- QueryResponse queryResponse = solrClient.query(query);
- // 获取查询到的结果集
- SolrDocumentList results = queryResponse.getResults();
- System.out.println(results);
- System.out.println(results.get(0));
- System.out.println(results.get(1));
- System.out.println(results.get(2));
- System.out.println(results.get(3));
- System.out.println(results.get(4));
- System.out.println(results.get(5));
- // 提交
- solrClient.commit();
- }
- }
II. 执行结果
I. 查询参数
参数 | 描述 |
---|---|
q | 这是Apache Solr的主要查询参数,文档根据它们与此参数中的术语的相似性来评分。 |
fq | 这个参数表示Apache Solr的过滤器查询,将结果集限制为与此过滤器匹配的文档。 |
start | start参数表示页面的起始偏移量,此参数的默认值为0。 |
rows | 这个参数表示每页要检索的文档的数量。此参数的默认值为10。 |
sort | 这个参数指定由逗号分隔的字段列表,根据该列表对查询的结果进行排序。 |
fl | 这个参数为结果集中的每个文档指定返回的字段列表。 |
wt | 这个参数表示要查看响应结果的写入程序的类型。 |
fl | 表示索引显示那些field(*表示所有field,如果想查询指定字段用逗号或空格隔开(如:Name,SKU,ShortDescription或Name SKU ShortDescription【注:字段是严格区分大小写的】) |
q.op | 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或) |
hl | 是否高亮 ,如hl=true |
hl.fl | 高亮field ,hl.fl=Name,SKU |
hl.snippets | 默认是1,这里设置为3个片段 |
hl.simple.pre | 高亮前面的格式 |
hl.simple.post | 高亮后面的格式 |
facet | 是否启动统计 |
facet.field | 统计field |
特殊字符:
- 1. “:” 指定字段查指定值,如返回所有值*:*
- 2. “?” 表示单个任意字符的通配
- 3. “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
- 4. “~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
- 5. 邻近检索,如检索相隔10个单词的”apache”和”jakarta”,”jakarta apache”~10
- 6. “^” 控制相关度检索,如检索jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache
- 7. 布尔操作符AND、||
- 8. 布尔操作符OR、&&
- 9. 布尔操作符NOT、!、- (排除操作符不能单独与项使用构成查询)
- 10. “+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在
- 11. ( ) 用于构成子查询
- 12. [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
II. 示例
查询解释:q查询所有,start,rows从第二条开始到第六条,fl字段过滤,wt显示数据格式
构面或分组(faceting)命令被添加到任何正常的Solr查询请求,并且faceting计数在同一个查询响应中返回。
勾选facet后,会出现facet.query、facet.field、facet.prefix三个选项, rows设置为0.
示例:
- /**
- * Solr Java Api 测试
- * @author mazaiting
- */
- public class SolrTest {
- // Solr链接
- public static final String url = "http://localhost:8983/solr/solr_sample";
-
- /**
- * 构面或分组
- * @throws IOException
- * @throws SolrServerException
- */
- @Test
- public void facetTest() throws SolrServerException, IOException {
- // 创建客户端
- SolrClient solrClient = new HttpSolrClient.Builder(url).build();
- // 准备Solr文档
- SolrInputDocument document = new SolrInputDocument();
- // 创建查询
- SolrQuery query = new SolrQuery();
- // 设置查询条件
- query.setQuery("*:*");
- // 设置终止列
- query.setRows(0);
- // 设置构面
- query.addFacetField("author");
- // 创建查询请求
- QueryRequest request = new QueryRequest(query);
- // 创建查询相应
- QueryResponse response = request.process(solrClient);
- // 打印
- System.out.println(response.getFacetFields());
- // 获取构面列表
- List<FacetField> facetFields = response.getFacetFields();
- // 遍历
- for (FacetField facetField : facetFields) {
- // 获取值
- List<Count> values = facetField.getValues();
- for (Count count : values) {
- System.out.println(count.getName() + " : " + count.getCount()
- + "[drilldown qry: " + count.getAsFilterQuery());
- }
- System.out.println("Hello");
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。