Solr查询Solr语法Solr更新分析Word文档格式.docx
- 文档编号:18954599
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:11
- 大小:21.21KB
Solr查询Solr语法Solr更新分析Word文档格式.docx
《Solr查询Solr语法Solr更新分析Word文档格式.docx》由会员分享,可在线阅读,更多相关《Solr查询Solr语法Solr更新分析Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
{}²
不包含范围检索,如检索某时间段记录,不包含头尾
date:
{200707TO200710}
”转义操作符,特殊字符包括+–&
|!
(){}[]^”~*?
:
“
二.高亮
hl-highlight,h1=true,表示采用高亮。
可以用h1.fl=field1,field2来设定高亮显示的字段。
∙hl.fl:
用空格或逗号隔开的字段列表。
要启用某个字段的highlight功能,就得保证该字段在schema中是stored。
如果该参数未被给出,那么就会高亮默认字段standardhandler会用df参数,dismax字段用qf参数。
你可以使用星号去方便的高亮所有字段。
如果你使用了通配符,那么要考虑启用hl.requiredFieldMatch选项。
∙hl.requireFieldMatch:
如果置为true,除非该字段的查询结果不为空才会被高亮。
它的默认值是false,意味着它可能匹配某个字段却高亮一个不同的字段。
如果hl.fl使用了通配符,那么就要启用该参数。
尽管如此,如果你的查询是all字段(可能是使用copy-field指令),那么还是把它设为false,这样搜索结果能表明哪个字段的查询文本未被找到
∙hl.usePhraseHighlighter:
如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
∙hl.highlightMultiTerm
如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。
默认为false,同时hl.usePhraseHighlighter要为true。
∙hl.snippets:
这是highlighted片段的最大数。
默认值为1,也几乎不会修改。
如果某个特定的字段的该值被置为0(如f.allText.hl.snippets=0),这就表明该字段被禁用高亮了。
你可能在hl.fl=*时会这么用。
∙hl.fragsize:
每个snippet返回的最大字符数。
默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。
大字段时不会这么做。
∙hl.mergeContiguous:
如果被置为true,当snippet重叠时会merge起来。
∙hl.maxAnalyzedChars:
会搜索高亮的最大字符,默认值为51200,如果你想禁用,设为-1
∙hl.alternateField:
如果没有生成snippet(没有terms匹配),那么使用另一个字段值作为返回。
∙hl.maxAlternateFieldLength:
如果hl.alternateField启用,则有时需要制定alternateField的最大字符长度,默认0是即没有限制。
所以合理的值是应该为
∙hl.snippets*hl.fragsize这样返回结果的大小就能保持一致。
∙hl.formatter:
一个提供可替换的formatting算法的扩展点。
默认值是simple,这是目前仅有的选项。
∙显然这不够用,你可以看看org.apache.solr.highlight.HtmlFormatter.java和solrconfig.xml中highlighting元素是如何配置的。
注意在不论原文中被高亮了什么值的情况下,如预先已存在的emtags,也不会被转义,所以在有时会导致假的高亮。
∙hl.fragmenter:
这个是solr制定fragment算法的扩展点。
gap是默认值。
regex是另一种选项,这种选项指明highlight的边界由一个正则表达式确定。
这是一种非典型的高级选项。
为了知道默认设置和fragmenters(andformatters)是如何配置的,可以看看solrconfig.xml中的highlight段。
regex的fragmenter有如下选项:
∙hl.regex.pattern:
正则表达式的pattern
∙hl.regex.slop:
这是hl.fragsize能变化以适应正则表达式的因子。
默认值是0.6,意思是如果hl.fragsize=100那么fragment的大小会从40-160.
三.分组查询:
1.
FieldFacet
Facet
字段通过在请求中加入
”facet.field”
参数加以声明
如果需要对多个字段进行
Facet查询
那么将该参数声明多次
.
比如
/select?
q=联想
facet=on
facet.field=cpu
facet.field=videoCard
各个
字段互不影响
且可以针对每个
字段设置查询参数
以下介绍的参数既可以应用于所有的
字段
也可以应用于每个单独的
应用于单独的字段时通过
f.字段名.参数名=参数值
这种方式调用
比如
facet.prefix
参数应用于
cpu
可以采用如下形式
f.cpu.facet.prefix=Intel
1.1
facet.prefix
表示
字段值的前缀
”facet.field=cpu&
facet.prefix=Intel”,
那么对
cpu字段进行
查询
返回的
都是以
”Intel”
开头的
”AMD”
型号将不会被统计在内
.
1.2
facet.sort
字段值以哪种顺序返回
可接受的值为
true(count)|false(index,lex).true(count)
表示按照
count
值从大到小排列
.false(index,lex)
表示按照字段值的自然顺序
(字母
数字的顺序
)
排列
默认情况下为
true(count).
当
facet.limit
值为负数时
默认
facet.sort=false(index,lex).
1.3
facet.limit
限制
字段返回的结果条数
默认值为
100.
如果此值为负数
表示不限制
1.4
facet.offset
返回结果集的偏移量
默认为
0.
它与
配合使用可以达到分页的效果
1.5
facet.mincount
限制了
字段值的最小
count,
合理设置该参数可以将用户的关注点集中在少数比较热门的领域
1.6
facet.missing
””,
如果设置为
true
或者
on,
那么将统计那些该
字段值为
null
的记录.
1.7
facet.method
取值为
enum
或
fc,
fc.
该字段表示了两种
的算法
与执行效率相关
适用于字段值比较少的情况
比如字段类型为布尔型
或者字段表示中国的所有省份.Solr
会遍历该字段的所有取值
并从
filterCache
里为每个值分配一个
filter(
这里要求
solrconfig.xml
里对
的设置足够大
).
然后计算每个
filter
与主查询的交集
fc(
FieldCache)
适用于字段取值比较多
但在每个文档里出现次数比较少的情况
.Solr
会遍历所有的文档
在每个文档内搜索
Cache
内的值
如果找到就将
内该值的count
加
1.
1.8
facet.enum.cache.minDf
facet.method=enum
时
此参数其作用
minDf
minimumdocumentfrequency.
也就是文档内出现某个关键字的最少次数
该参数默认值为
设置该参数可以减少
的内存消耗
但会增加总的查询时间
(
计算交集的时间增加了
如果设置该值的话
官方文档建议优先尝试
25-50
2.
DateFacet
日期类型的字段在文档中很常见
如商品上市时间
货物出仓时间
书籍上架时间等等
某些情况下需要针对这些字段进行
Facet.
不过时间字段的取值有无限性
用户往往关心的不是某个时间点而是某个时间段内的查询统计结果
.Solr
为日期字段提供了更为方便的查询统计方式
.当然
字段的类型必须是
DateField(
或其子类型
).
需要注意的是
使用
DateFacet
字段名
起始时间
结束时间
时间间隔这
4
个参数都必须提供
与
FieldFacet
类似
DateFacet
也可以对多个字段进行
并且针对每个字段都可以单独设置参数
2.1
facet.date
该参数表示需要进行
的字段名
facet.field
一样
该参数可以被设置多次
表示对多个字段进行
DateFacet.
2.2
facet.date.start
时间的一般格式为
”1995-12-31T23:
59:
59Z”,
另外可以使用
”NOW”,”YEAR”,”MONTH”
等等
具体格式可以参考
org.apache.solr.schema.DateField
的
javadoc.
2.3
facet.date.end
2.4
facet.date.gap
时间间隔
如果
start
为
2009-1-1,end
2010-1-1.gap
设置为
”+1MONTH”
表示间隔1
个月
那么将会把这段时间划分为
12
个间隔段
注意
”+”
因为是特殊字符所以应该用
”%2B”
代替
2.5
facet.date.hardend
取值可以为
true|false,
false.
它表示
gap
迭代到
end
处采用何种处理
举例说明
2009-12-25,gap
”+1MONTH”,hardend
false
的话最后一个时间段为
2009-12-1
至
2010-1-1;
hardend
2009-12-25.
2.6
facet.date.other
取值范围为
before|after|between|none|all,
none.
before
会对
之前的值做统计
after
之后的值做统计
between
之间所有值做统计
的话
那么该值就是各个时间段统计值的和
none
表示该项禁用
all
before,after,all
都会统计
举例
:
facet.date=date
facet.date.start=2009-1-1T0:
0:
0Z
facet.date.end=2010-1-1T0:
facet.date.gap=%2B1MONTH
facet.date.other=all
返回结果
<
lstname="
facet_counts"
>
facet_queries"
/>
facet_fields"
facet_dates"
intname="
2009-01-01T00:
00:
00Z"
5<
/int>
2009-11-01T00:
1<
2009-12-01T00:
strname="
gap"
+1MONTH<
/str>
datename="
end"
2010-01-01T00:
00Z<
/date>
before"
180<
after"
between"
54<
/lst>
3.
FacetQuery
FacetQuery
利用类似于
filterquery
的语法提供了更为灵活的
通过
facet.query
参数
可以对任意字段进行筛选
例
1:
facet.query=date:
[2009-1-1T0:
0ZTO2009-2-1T0:
0Z]
[2009-4-1T0:
0ZTO2009-5-1T0:
0Z]"
3<
2:
facet.query=price:
[*TO5000]
price:
[*TO5000]"
116<
3:
facet.query=cpu:
[ATOG]
cpu:
[ATOG]"
11<
4.
key
操作符
可以用
操作符为
字段取一个别名
facet.field={!
key=中央处理器}cpu
key=显卡}videoCard
中央处理器"
Intel
酷睿2双核
T6600"
48<
奔腾双核
T4300"
28<
显卡"
ATIMobilityRadeonHD4"
63<
NVIDIAGeForceG105M"
24<
NVIDIAGeForceGT240M"
21<
NVIDIAGeForceG103M"
8<
NVIDIAGeForceGT220M"
NVIDIAGeForce9400MG"
7<
NVIDIAGeForceG210M"
6<
5.
tag
操作符和
ex
当查询使用
的时候
的字段正好是
那么查询结果往往被限制在某一个值内
fq=screenSize:
14
facet.field=screenSize
screenSize"
14.0"
107<
10.2"
0<
11.1"
可以看到
屏幕尺寸
(screenSize)
14
寸的产品共有
107
件
其它尺寸的产品的数目都是0,
这是因为在
里已经限制了
screenSize:
14.
这样
查询结果中
除了
screenSize=14
的这一项之外
其它项目没有实际的意义
有些时候
用户希望把结果限制在某一范围内
又希望查看该范围外的概况
比如上述情况
既要把查询结果限制在
寸屏的笔记本
又想查看一下其它屏幕尺寸的笔记本有多少产品
这个时候需要用到
和
操作符
就是把一个
标记起来
ex(exclude)
是在
的时候把标记过的
排除在外
fq={!
tag=aa}screenSize:
ex=aa}screenSize
14.1"
40<
13.3"
34<
/ls
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Solr 查询 语法 更新 分析