查询问题---queryparse深入理解

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里

查询问题,最直接的反馈就是页面出来的结果。
然后牵扯到的问题就一步一步深入了。
第一层:queryparse,其中关联分词,关联booleanquery or phrasequery,关联boost。。。。
第二层:排序了,关联排序的策略、排序的得分公式
第三层:各种转换、过滤、筛选后的页面结果
这里重点将queryparse的问题。

对于boolean查询,可以完成细粒度的and or,但是,会损失查询term之间的关联关系,例如不能直接反应term直接的距离关系。例如 上架宝贝,分词是上架|宝贝,boolean查询可能对上架、宝贝都有结果,但是,上架宝贝挨着的不一定靠前。因为booleanquery 直接的形式,得分是各维度和。

对于phrasequery,顾名思义短语查询,更符合搜索用语特征,输入的是什么就搜索什么,只过滤停用词、非term词,信息损失相对较少,同时保留term之间关联关系。当然有扩展那就是智能了。phrasequery既然是分词后的多词组合,分词不可避免丢失中间某些单字,从而严格的精准去搜,导致有时候没有结果。
用户转为希望 上架宝贝,上架、宝贝都有结果,并且上架宝贝挨着的靠前,也有甚至理解 上架优先、其次宝贝、其次上架宝贝。众口难调!

各种queryparse就是本着灵活性、信息不失真(当然都是靠人为的干扰了,强制的boost或者改写)去理解用户输入串。dismaqueryparse相对stardqueryparse最大的不同是,前者得分是求max,后者得分是求和。前者是多域联合,域之间的关联兼顾,而后者忽略了域之间的关联性。

采取booleanquery,需要schema中配置

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" >  

solrconfig中配置

<luceneMatchVersion>LUCENE_34</luceneMatchVersion> //


更多信息请参考链接

http://solr.pl/en/2010/07/14/solr-and-phrasequery-phrase-bonus-in-query-stage/

http://wiki.apache.org/solr/DisMaxQParserPlugin

另外,booleanqueryphrasequery的选择,建议优先使用phrasequery

目录
相关文章
|
5天前
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
188 4
|
5天前
|
XML SQL JSON
query 与 params:选择正确的参数传递方式
query 与 params:选择正确的参数传递方式
FastAPI(5)- 查询参数 Query Parameters
FastAPI(5)- 查询参数 Query Parameters
225 0
FastAPI(5)- 查询参数 Query Parameters
|
SQL Java 数据库
PreparedStatement 模糊匹配 结果却:Parameter index out of range (1 > number of parameters, which is 0)
PreparedStatement 模糊匹配 结果却:Parameter index out of range (1 > number of parameters, which is 0)
387 0
One order search dynamic sql statement生成位置
One order search dynamic sql statement生成位置
One order search dynamic sql statement生成位置
http://www.vxiaotou.com