1.查询语法:
-----参数-----
echoParams:指定responseheader包含哪些参数,可取none/all/explicit(默认值)
rows:指定查询结果最多纪录数,跟start一起实现分页
wt:执行响应的输出格式,可以是xml/json等
indent:返回结果是否缩进,默认关闭。一般调试json,php,phps,ruby输出才有必要用这个参数。用indent=true|on开启
defType:指定处理查询语句的查询解析器,例defType=lucence
mm:查询最小应该匹配:mm没有定义则在solrconfig.xml中默认指定,默认为100%表示全匹配;mm为正整数指定最小匹配数量;mm为负整数指定匹配最小值减去该值;mm为百分比指定返回该相似性的所有结果;mm为负数百分比,则指定这部分可以忽略。例:4<80% 表示如果少于4个,则全是必须的,如果多余4个则只需要80%的字句。
大段文字描述不直观,还是直接上例子来说明mm参数的四个基本语法:
fl:指定查询结果中返回的字段
qf:查询字段,具体到哪些字段,如果缺省默认为df。(定义了从哪些域进行搜索,以及各个域之间的权重。)
例如:qf="fieldOne^2.3 fieldTwo fieldThree^0.4"
q.op:表示q的查询语句中各条件的逻辑操作AND(与)OR(或)
sort:排序
tie:这个tie参数通常是一个小于1的浮点数,用于defType=disMax的solr查询。当查询命中多个field的时候,最终的score获得多少将由这个tie参数来进行调节。比如命中了field1,field2这2个field。
如果field1.score= 10,field2.score=3。那么 score = 10 + tie * 3.
hl:高亮显示
hl.fl:用空格或逗号隔开的字段列表。
hl.fragsize:每个snippet返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。大字段时不会这么做。
hl.alternateField: 如果没有生成snippet(没有terms匹配),那么使用另一个字段值作为返回。
hl.maxAlternateFieldLength:如果hl.alternateField启用,则有时需要制定alternateField的最大字符长度,默认0是即没有限制。所以合理的值是应该为hl.snippets * hl.fragsize这样返回结果的大小就能保持一致。
hl.simple.pre:高亮关键字前缀
hl.simple.post:高亮后面的格式
hl.snippets:highlighted片段的最大数。默认值为1,也几乎不会修改。如果某个特定的字段的该值被置为0(如f.allText.hl.snippets=0),这就表明该字段被禁用高亮了。你可能在hl.fl=*时会这么用。
df:默认的查询字段,一般默认指定
omitHeader:指定是否返回查询的Header信息
——-facet:搜索结果按照Facet的字段分组并统计facet.field:被统计的field———-
facet.query:可以对任意的字段进行筛选
facet.prefix :表示Facet字段前缀
facet.limit :Facet字段返回条数
facet.offict :开始条数,偏移量,它与facet.limit配合使用可以达到分页的效果
facet.mincount:Facet字段最小count,默认为0
facet.missing :如果为on或true,那么将统计那些Facet字段值为null的记录
facet.method :取值为enum或fc,默认为fc, fc表示Field Cache
facet.enum.cache.minDf :当facet.method=enum时,参数起作用,文档内出现某个关键字的最少次数
——日期类型字段——-
facet.date:表示需要Data Facet的字段名
facet.date.start:起始时间.时间一般格式为”1995-12-31T12:59:59Z”,另外可以使用"NOW","YEAR","MONTH"等
facet.date.end:结束时间
facet.date.gap:时间间隔
facet.date.hardend:true|false
facet.sort=count – 排序的方式,根据count或者index:true(count)表示按照count降序
facet.pivot:按照多个维度进行分组查询(所有的分组查询统计,不管是一个维度两个维度都可以使用face.pivot来统计)
———facet.range:指定需要进行范围分片的字段——-
(注意:如果指定了该参数,就不要再使用facet.field参数)
facet.range.start:指定起始值
facet.range.end:指定结束值
facet.range.grap:指定间隔
————spellcheck:拼写检查————
spellcheck.extendedResults:true
<不仅返回建议词在索引中的频率,而且还返回原始的term在索引中的频率>
spellcheck.count:10
spellcheck.alternativeTermCount:同时对多个单词进行拼写检查时,每个单词返回的建议词的数量
spellcheck.maxResultsForSuggest:当查询的匹配结果超过maxResultsForSuggest设置的值时,则不再进行拼写检查。
spellcheck.collate:Solr会基于建议词生成新的查询以替换不正确的拼写的查询
spellcheck.collateExtendedResults:意思与spellcheck.extendedResults相同,如果设置为false,则此值将会被忽略
spellcheck.maxCollationTries:最多试几次
spellcheck.maxCollations:最多返回多少个校验结果
lowernames:将从文件中抽取的元数据信息字段名都转换为小写
——-进阶版———
fmap.a:
fmap.div:
uprefix:
captureAttr:
echoHandler:
distanceMeasure:
accuracy:
maxEdits:
minPrefix:
maxInspections:
minQueryLength:
maxQueryFrequency:
combineWords:
breakWords:
maxChanges:
tv:
distrib:
facet.range.start:
facet.range.end:
facet.range.gap:
title:
v.template:
v.layout:
q.alt:
-----------------mlt(more like this)---------------
mlt.fl:指定用于mlt查询的字段
mlt.mintf: 指定最小词频,词频低于该值的词将被忽略。
mlt.mindf: 指定最小文档频率,文档频率低于该值的词将被忽略。
mlt.maxdf: 指定最大文档频率, 文档频率高于该值的词将被忽略。
mlt.minwl: 设置词的最小长度,小于该值的词将被忽略。
mlt.maxwl: 设置词的最大长度,大于该值的词将被忽略。
mlt.maxqt: 设置生成的查询中包含的最大查询词个数。
mlt.maxntp: 设置没有使用TermVector支持存储的每个示例文档字段中要解析的令牌的最大数量。
mlt.boost: 指定查询是否会因为有趣的相关词而增强。取值:true / false.
mlt.qf: 设置查询字段及其权重。(类似于DisMax查询解析器使用的相同格式)这些字段必须在mlt.fl中定义。
mlt.count:指定为每个结果返回的相似文档的数量。默认值是5。
omitNorms:建议专家才设置次属性。原始类型数据(int,float,boolean,string)此值默认为true,此值省略部分操作,提升性能。
termVectors:词项向量索引
termPositions:存储 term vector中的地址信息,会消耗存储开销。
termOffsets:存储 term vector的偏移量,会消耗存储开销
omitPositions=true|false如果设置,省略掉term vector中的地址信息
——type----
precisionStep=“n”:隔n位索引一个前缀
location:
text_general:
currency:
ignored:
random:
2. Schema.xml配置
-----属性-----
sortMissingLast: 为true时,没有该field的数据排在有该field的数据之后,而不管请求时其他的排序规则。默认为false
sortMissingFirst:为true时,没有该field的数据排在有该field的数据之前,而不管请求时其他的排序规则。默认为true
analyzer:字段类型指定的分词器。
type:当前分词器的作用。index代表生成索引时使用的分词器,query代表在查询时使用的分词器
tokenizer:分词器类。
filter:分词后应用的过滤器,过滤器调用顺序和配置相同
precisionStep:精确阶数。值越大,索引越小,范围查询性能(尤其是细粒度的范围查询)就越差;值越小,索引越大,性能越差。
positionIncrementGap:和multiValued一起使用,设置多个值之间的虚拟空白的数量。
---fields----
indexed:缺省true。说明这个数据应该被搜索和排序,如果没有indexed,则stored应为true.
stored:缺省true。说明这个字段被包含在搜索结果中是合适的。如果数据没有stored,则indexed应为true。
compressed:字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只用strField和TextField是可以压缩。通常适合字段长度超过200个字符。
multiValued:字段多于一个的时候,可设置为true。
---------copyfield------
复制域:可以将多个field复制到一个field中,以便进行统一检索。
例如:输入关键字搜索title标题内容context:
定义title,context,text的域:根据关键字只搜索text域的内容就相当于搜索title和context,将title和context复制到text中
---------动态域-----
不指定具体的名称,只要定义字段名称的规则。例如:name="*_i",表示任何以“_i”结尾的字段都是符合这个定义的。
---------Solr的检索运算符--------
“:” 指定字段查指定值,如返回所有值*:*
“?”表示单个任意字符的通配
“*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
“~”表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
邻近检索,如检索相隔10个单词的”apache”和”jakarta”,”jakarta apache”~10
“^”控制相关度检索,如检索jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache
布尔操作符AND、||
布尔操作符OR、&&
布尔操作符NOT、!、-(排除操作符不能单独与项使用构成查询)
“+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在
( ) 用于构成子查询
[] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
{}不包含范围检索,如检索某时间段记录,不包含头尾
date:{200707 TO 200710}
" 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : "