solr(转),
1.solr介绍
1.1 solr是什么
Solr是构建在Apache的Lucene之上独立的企业级搜索应用服务器。对外提供类似REST风格的Web Services,用户可以通过http请求发送指定格式文件到Solr服务器生成索引、更新索引,也可以通过http提出查询请求并得到指定格式返回结果。
1.2 solr不是什么
- Solr不是Google或Baidu这样的网络搜索引擎
- Solr不具备网站搜索引擎优化的功能
2. solr配置文件
solr主要配置文件包括schema.xml、solrconfig.xml等。schema主要定义了solr文档结构,如果将solr比作数据库,schemal就类似于表结构
schemal.xml在solr中的位置如上图所示,我们在将文档上传到solr服务器中,或者更新文本文档时,会通过文本分析器对上传的文本进行分析,将分析的结果建立索引存放在lucene中。schemal中定义了字段类型、字段名称、索引分析器,查询分析器等信息提供给文本分析使用。
2.1 schemal构成
Schema构成
- Fields元素,定义文档字段
- Types元素,定义字段类型
- 其他元素,其他设定uniqueKey、copyField
2.2 fields properties
- 包括普通字段和动态字段
- 字段属性解释:
- name:字段名称,大小写敏感
- type:字段类型
- indexed:是否创建索引只有index=true 的字段才能做facet.field的字段,同时只有index=true该字段才能当做搜索的内容,当然store=true或者false没关系,将不需要被用于搜索的,而只是作为结果返回的field的indexed设置为false
- stored:field字段值是否存储,如果你设置stored=false,就算你有符合的数据看不到该field
- multiValued:是否多值字段
- 其他特殊字段如:_version_用于避免并发冲突
2.3 field types
Types元素
Solr内置了常用的字段类型包括:
- 字符串字段(string)
- 数值字段(int,float,long,double,tint,tfloat,tlong,tdouble)
- 日期字段(date,tdate)
- 自定义高级字段类型
常见高级字段类型包括索引分析器和查询分析器,而分析器通常由分词器、停止词过滤器、同义词过滤器、词元转换过滤器构成
3. solr查询控制台
Solr提供了丰富的基于http协议的接口,同时也提供了方便的管理控制台,通过控制台我们可以很便捷的管理solr core、查看solr运行日志、查询、分析等。
基本查询参数:q、fq、sort、(start、rows)、fl、df、Raw Query Parameters、wt、indent、debugQuery、dismax、edismax、hl、facet、spatial、spellcheck
3.1 q(query)
查询表达式 q=<fieldName>:<searchVal>
3.2 fq(filter query)
fq为过滤词,非必选,可有多个值
关闭缓存
fq={!cache false} id:111
过滤顺序
添加执行成本,执行成本越低越先执行,成本大于等于100的过滤器被solr视为后置过滤器
fq={!cost=1}category:电器
fq={!cost=2}onsale:1
fq={!cost=100}star:[5 TO 9]
q和fq的区别
fq=category:电器&fq=onsale:1
结果等价于
fq=category:电器 AND onsale:1
但是缓存不同上边的写法solr会分别缓存category:电器和onsale:1的结果
3.3 其他
排序
id ASC, cmmdtyName DESC
start,rows
分页开始索引,每页条数
fl(field list)
字段列表
wt(writer type)
响应格式
wt=json
debugQuery
调试模式
debugQuery=true
dismax 析取最大化查询解析器
edismax
扩展析取最大化查询解析器
高亮
hl-highlight,h1=true,表示采用高亮。可以用h1.fl=field1,field2 来设定高亮显示的字段。
hl.fl:用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高 亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用 。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,如果你想禁用,设为-1hl.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元素是如何配置的。 注意在不论原文中被高亮了什么值的情况下,如预先已存在的em tags,也不会被转义,所以在有时会导致假的高亮。 - - - hl.fragmenter:这个是solr制定fragment算法的扩展点。gap是默认值。regex是另一种选项,这种选项指明highlight的边界由一个正则表达式确定。这是一种非典型 的高级选项。为了知道默认设置和fragmenters (and formatters)是如何配置的,可以看看 solrconfig.xml 中的highlight段。hl.regex.pattern:正则表达式的patternhl.regex.slop:这是hl.fragsize能变化以适应正则表达式的因子。默认值是0.6,意思是如果 hlfragsize=100 那么fragment的大小会从40-160.
参考链接
https://blog.csdn.net/wangdong5678999/article/details/80508599