Solr 查询参数之 defType

defType 参数用于选择一个查询解析器来处理查询的请求,如:defType=dismax。在 Solr 1.3 版本以后,默认的查询解析器是 dismax。

Solr 查询语法和解析

Solr 支持多种查询解析,给搜索引擎开发人员提供灵活的查询解析。Solr 中主要包含这几个查询解析器:标准查询解析器、DisMax 查询解析器,扩展 DisMax 查询解析器(eDisMax)。

DIH 之 SQL Entity Processor

该 Processor 用于处理 Jdbc 数据源,其属性如下所示:
query:
必须的,用于查询行的 SQL 语句
deltaQuery:
该语句在执行 delta-import 时生效,这个查询将选择行的主键,这些主键可以通过 ${dataimporter.delta.<column-name>} 变量生效
parentDeltaQuery:
该语句在执行 delta-import 时生效
deletedPkQuery:
该语句在执行 delta-import 时生效
deltaImportQuery:
该语句在执行 delta-import 时生效。

Solr 内置的字段类型

以下表格中列出的是 Solr 中内置的字段类型,可以直接使用。这些字段类型的处理类都在 org.apache.solr.schema 包下。

Class

描述

BCDIntField 二进制整形字段
BCDLongField 二进制长整形字段
BCDStrField 二进制字符型字段
BinaryField 二进制数据
BoolField 包含true或者false,值的第一个字符如果是1、t、T均表示true,其他为false
ByteField 一个字节数据
DateField 一个精确到毫秒的时间值
DoubleField
ExternalFileField 从硬盘读取文件作为该字段的值
FloatField
IntField
Location 方位搜索用到,存经纬度值
LongField
Point N维点搜索,在蓝图或者CAD图中使用
RandomSortField 不包含值,当查询时按这种类型的字段排序时会产生随机排序。使用该特性时需要是一个动态字段
ShortField
StrField UTF-8编码的字符串或Unicode
TextField 文本类型,一般包含多个单词或汉字
UUIDField 唯一识别码,单传入的值是“NEW”时,Solr将为其创建1个UUID值

schema.xml 中的字段类型定义

字段类型定义在 schema.xml 的 types 这个元素里头。这里是一个字段类型定义的例子

&lt;fieldType name=&quot;textTight&quot;</p>
<p>positionIncrementGap=&quot;100&quot; &gt;</p>
<p>&lt;analyzer&gt;</p>
<p>&lt;tokenizer/&gt;</p>
<p>&lt;filter</p>
<p>synonyms=&quot;synonyms.txt&quot; ignoreCase=&quot;true&quot; expand=&quot;false&quot;/&gt;</p>
<p>&lt;filter</p>
<p>generateWordParts=&quot;0&quot; generateNumberParts=&quot;0&quot;</p>
<p>catenateWords=&quot;1&quot; catenateNumbers=&quot;1&quot; catenateAll=&quot;0&quot;/&gt;</p>
<p>&lt;filter/&gt;</p>
<p>&lt;filter</p>
<p>language=&quot;English&quot; protected=&quot;protwords.txt&quot;/&gt;</p>
<p>&lt;filter/&gt;<br />
&lt;/analyzer&gt;</p>
<p>&lt;/fieldType&gt;

以上例子的第一行包含了字段类型名称,textTight,和字段的处理的实现类,solr.TextField。这一实现类用于保证字段可以被正确的处理。在这个文件里,一些事项类采用了缩写,solr.TextField其实就是 org.apache.solr.schema.TextField

Solr 字段类型

Solr 的一个字段类型包括四个部分:

  • 字段类型名称,一个字段通过引用改名称来指定其是哪个类型的
  • 实现类名称,表示该类型的字段通过这一实现类来处理
  • 分析器,文本类型的字段会包含该描述,可以指定索引时用什么分析器,搜索这一类型字段时用什么分析器。配置切词器就是在这个地方配置的。
  • 字段属性

DIH 之 Entity Processors

Entity processors 负责抽取数据,然后发送给 Solr 索引。例子中的 实体包括视图和表中的数据。
以下是 Entity processors 中常用的属性:
datasource:
指定数据源的名称,当有多个数据源时,需要该名称来决定使用哪个数据源
name:
必选,指定实体唯一的名称
pk:
实体的主键,只有到使用delta-imports是,它的值才是必须。
processor:
默认是 SQLEntityProcessor,如果数据源不是关系型数据库,该值必填
onError:
容错值,可选有:abort|skip|continue,默认为 abort。 skip 是跳过当前document,continue 是忽略错误继续执行。
preImportDeleteQuery:
在执行 full-import 之前的删除语句
postImportDeleteQuery:
在 full-import 完成后执行的语句

磨刀不误砍柴工

搜索群里经常遇到有刚入门的朋友问一下 Solr 比较常用功能的使用方法,如高亮、集成中文切词、和现有项目集成、怎么使用查询返回的 XML 数据、如何做 Suggest、如何跟现有的应用整合、以及如何使用DIH。。。确实,使用 Solr 快速搭建一个搜索时,首先遇到的就是这些问题,搞定这些问题,一个搜索就出来了。看到大家问这些问题时,很想说暂停下现在翻译的事,去写一些这方面快速使用 Solr 的文章,一则方便大家快速搭建搜索应用,二则大家问这些问题时,可以直接贴网址给大家,能很快吸引很多初学者来这里。后来想想,还是不要这么操之过急,我自己应该先把基础打好,踏实的翻译 Solr 基础功能的文章,把这些基础的东西搞明白了,快速实现一些功能会更加快捷,高手都是在练基本功,乔丹在热身时总在练投篮,其他球员总是在飞来飞去的灌篮。所以我想我也应该继续练基本功,继续学习和翻译 Solr 基础功能。

DIH 之 URLDataSource

这个数据源经常使用 XPathEntityProcessor 来从 file:// 或 http:// 位置来获取内容。

public class URLDataSource extends DataSource&lt;Reader&gt;

这里是一个例子:

&lt;dataSource name=&quot;a&quot;<br />
type=&quot;URLDataSource&quot;<br />
baseUrl=&quot;http://host:port/&quot;<br />
encoding=&quot;UTF-8&quot;<br />
connectionTimeout=&quot;5000&quot;<br />
readTimeout=&quot;10000&quot;/&gt;

这个 URLDataSource 接受以下可选参数:
baseURL:
数据源地址
connectionTimeout:
连接超时,默认值是 5 秒
encoding:
编码
readTimeout:
读取超时,默认值是 10 秒

DIH 之 FileDataSource 数据源

该数据源使用起来跟 URLDataSource 类似,但是这个数据源主要是从磁盘的文件中获取内容。和 URLDataSource 唯一不同的是,访问磁盘文件时需要制定磁盘路径,如下所示:

public class FileDataSource extends DataSource&lt;Reader&gt;

这个数据源接受两个可选参数:
basePath:
用于指定绝对路径前缀
encoding:
文件字符集

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