Solr基础相关

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参数的四个基本语法:

a:3  必须匹配3个条文,其余的是可选的。
b:-2 2个条文是可选的,其余的是必须的。
c:66% 66%的条文是必须的,其余的是可选的。
d:-25% 25%的条文是可选的,其余的是必须的。
注 意:-是对必须的除以可选的的逆向取值,它在这儿的定义其实没有否定多少的意思。虽然75%和-25%看起来一样,但是在rounding的时候就不一样 了,例如有五个查询条文,第一个条文需要三次,第二个条文需要四次,这也就说明如果要进行rounding计算,那么就需要反转标志再用100减去此值。
另外两点:1.如果mm的值是一个确定的值n,但是查询的条文数小于此值,那么n会减少到查询结果中的条文总数。例如mm值为-5但是查询中的条文一共只有2个,所以结果就是所有条文都是可选的。
2.记住一点,不管是lucene还是solr,在所有查询中,必须有一个条文是匹配的,即使所有条文都是可选的,

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.mincountFacet字段最小count,默认为0

facet.missing :如果为ontrue,那么将统计那些Facet字段值为null的记录

facet.method :取值为enumfc,默认为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.hardendtrue|false 

facet.sort=count –  排序的方式,根据count或者indextrue(count)表示按照count降序

facet.pivot:按照多个维度进行分组查询(所有的分组查询统计,不管是一个维度两个维度都可以使用face.pivot来统计

———facet.range:指定需要进行范围分片的字段——-

(注意:如果指定了该参数,就不要再使用facet.field参数)

facet.range.start:指定起始值

facet.range.end:指定结束值

facet.range.grap:指定间隔

————spellcheck:拼写检查————

spellcheck.extendedResultstrue

<不仅返回建议词在索引中的频率,而且还返回原始的term在索引中的频率>

spellcheck.count10

spellcheck.alternativeTermCount:同时对多个单词进行拼写检查时,每个单词返回的建议词的数量 

spellcheck.maxResultsForSuggest:当查询的匹配结果超过maxResultsForSuggest设置的值时,则不再进行拼写检查。

spellcheck.collateSolr会基于建议词生成新的查询以替换不正确的拼写的查询

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:字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只用strFieldTextField是可以压缩。通常适合字段长度超过200个字符。

multiValued:字段多于一个的时候,可设置为true

---------copyfield------

复制域:可以将多个field复制到一个field中,以便进行统一检索。

例如:输入关键字搜索title标题内容context

定义titlecontext,text的域:根据关键字只搜索text域的内容就相当于搜索titlecontext,titlecontext复制到text

---------动态域-----

不指定具体的名称,只要定义字段名称的规则。例如:name="*_i",表示任何以“_i”结尾的字段都是符合这个定义的。

---------Solr的检索运算符--------

 “:” 指定字段查指定值,如返回所有值*:*

 “?”表示单个任意字符的通配

 “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)

 “~”表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foamroams的单词;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}

 " 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : "

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值