schema.xml 中定义lucene索引字段名称,schema中不应该出现歧义的域名称。
以下列举的是需要避免的:
- fq: 走http协议,fq是filterquery的保留字,如果正常field中也有,可能解析出问题
- q: 类似fq
- fl: 类似fq
- _val_: function排序的一种,同样有这个域名,在queryparse时候可能出现
- docId:lucene内部id,如果schema定义了,那么fl 中返回的域名可能就混淆
- score:lucene得分字段,如果schema也定义了,并且当fl中返回score的时候,也就混淆了dismax: dismax 解析func: 函数查询解析
- 区间查询
fielda:[11 TO 22] 闭区间
fielda:{ 11 TO 22} 开区间
fielda:11 AND fielda:{ 11 To 22} 半开半闭区间一定是配对出现的
8. AND OR 用在solrj中; + - 用在 url中
- “” 表示一组,整体的意思,查询的时候分词效果不一样,需避免错误使用。() 括号表示一个clause,好比四则运算里面的括号
- 频率位置与tfitf与索引体积
如果tfitf需要屏蔽,也就是文本的长度、位置、频率不影响得分,此时定制siliarity,复写其中的得分因子为1.0f,对应schema中域的类型,去掉频率位置信息。 如果需要tfitf,就不可以全部屏蔽,需要部分开启,看业务决定
- 文本排序与业务质量的平滑。命中fieldA 比命中fieldB 权重大,一方面直接query时
候boost。如果命中fieldA 的时候,由另外值来排序,命中fieldA的时候tfitf不影响得分,存在另外一个问题。eg 输入淘宝,命中淘宝杭州、 淘宝商城、 淘宝taobao 、淘宝淘宝 、淘宝,那么另外值如果不是淘宝得分最高,而是淘宝taobao 最高,某种角度看,不是特别友好。如果是淘宝淘宝的命中,似乎也不好。这样容易滋生作弊。