利用 solrj 提交索引

首先创建一个 SolrInputDocument 对象,然后设置其字段值,通过 SolrServer’s  的 add() 方法,将文档提交给 solr,实例代码如下:

String urlString = "http://localhost:8983/solr";
SolrServer solr = new CommonsHttpSolrServer(urlString);
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "552199");
document.addField("name", "Gouda cheese wheel");
document.addField("price", "49.99");
UpdateResponse response = solr.add(document);
//最后记得 commit 使索引生效</div>
solr.commit();

什么是索引

索引是指添加内容到 Solr 的索引库,必要的时候,会修改或删除索引库中的数据,通过将数据加入索引库,我们就可以通过 solr 搜索这些数据。

Solr 索引库可以接受多种类型的数据源,包括 xml 文件,CSV 文件,从数据表中提出出来的数据,类似Word 和 PDF 这些常见的文档。
这里有三个常见往索引库添加数据的方式:
  • 使用构建在 Apache Tika 之上的 Solr Cell,Tika 可以提取二进制文件或者像 Office、Pdf 这样的结构化文件。
  • 通过 HTTP 方式,将 XML 文件上传给 Solr 服务器。
  • 写一个 Java 程序,通过 Solr 的 Java 客户端 API 。在应用程序中,使用 Java API 提交数据可能是最好的方式。

不管通过什么方式来抽取数据,但是往 Solr 索引库送数据有一个基本数据结构:document,一个document包含多个字段,每个字段包含一个名称和数据,数据有可能为空。其中的一个字段通常会被设置成唯一ID字段,尽管这个唯一ID字段在 Solr 中不是必须的。

如果字段名称在 schema.xml 文件中有定义,在分析阶段,字段的内容将会按配置中的说明进行处理,如果字段名称在 schema.xml 没有明确定义,将去动态字段中匹配该字段。

分析阶段

在两个时间需要用到分析。在索引时,当一个字段被创建时,分析这个字段得到的 token stream 将被加入索引库,并且定义出这个字段的 terms(包括位置、大小等等)。在查询时,搜索词将被分析,并且去字段的索引中匹配相应的 terms。

在许多情况下,同样的分析会被应用在两个阶段,比如精准搜索,需要索引和搜索时采用同样的分析策略。在其他情况下,索引和搜索所采用的策略会有所不同。
如果字段类型只是简单定义了 <analyzer> ,这样相同的分析策略会被应用到索引和搜索阶段。如果打算搜索和索引采用不同的分析策略,字段类型定义中需要包含两个 <analyzer> ,如下所示:
<br />
&lt;fieldType name=&quot;nametext&quot;&gt;<br />
&lt;analyzer *type=&quot;index&quot;{*}&gt;<br />
&lt;tokenizer/&gt;<br />
&lt;filter/&gt;<br />
&lt;filter words=&quot;keepwords.txt&quot;/&gt;<br />
&lt;filter synonyms=&quot;syns.txt&quot;/&gt;<br />
&lt;/analyzer&gt;<br />
&lt;analyzer *type=&quot;query&quot;{*}&gt;<br />
&lt;tokenizer/&gt;<br />
&lt;filter/&gt;<br />
&lt;/analyzer&gt;<br />
&lt;/fieldType&gt;<br />

在上面例子中,在索引时,文本内容将被转成小写,不存在keepwords.txt中的文本将被丢弃,剩下的将被替换syns.txt中的同义词。
在搜索时,会将搜索词转成小写,索引阶段的过滤和映射步骤搜索时没有定义,就不会发生。

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress · 闽ICP备18020075号