如何在SolrJ中使用Lucene Query类(CommonTermsQuery)

时间:2016-08-10 19:10:16

标签: solr solrj

我想使用Lucene的CommonTermsQuery类进行使用SolrJ执行的查询,那么如何使用Lucene的Query类?那些类和 Solr的查询解析器之间有什么区别?

1 个答案:

答案 0 :(得分:1)

Solr目前不包含使用CommonTermsQuery的查询解析器,但您可以add your own通过在.jar中编译<lib .. by yourself and then adding that jar来向Solr查询解析器solrconfig.xml中的指令。

使用CommonTermsQuery的an existing example on how to make a QParserPlugin for Solr作为要点,因此可能是开始使用自定义插件的好地方。您将在查询开头通过标准{!syntax}选择自定义QueryParser。由于SolrJ只是与Solr服务器通信的客户端,因此插件本身必须在服务器上实现并加载(或者如果您在SolrCloud / Cluster模式下运行on all servers)。

Query Parser采用自由格式文本(这是Solr擅长的)并将其转换为Lucene执行的一组Query类(代表查询,以查询解析器认为用户想要的方式)表达自己。)

differences between Solr's query parser and Lucene's query parser有几个,但是现在大多数人都使用edismaxdismax查询解析器(这些可能随着时间的推移逐渐演变为Lucene QP,我也不知道):

  

Solr Query Parser的差异包括(这些来自Solr Wiki上的旧页面 - 我不确定是否有更新的版本可用,但是因为Solr和Lucene的代码合并到一个树并得到同步,我想与单独的项目相比,引入的新差异较少):

  • 范围查询[a TO z],前缀查询a *,通配符查询a * b是常量评分(所有匹配的文档获得相同的分数)。不使用评分因子tf,idf,index boost和coord。匹配的术语数量没有限制(与过去版本的Lucene一样)。
    • Lucene 2.1也转而使用ConstantScoreRangeQuery进行范围查询。
  • A *可用于任一端点或两个端点,以指定开放式范围查询。

      

    字段:[* TO 100]查找所有字段值小于或等于100

         

    字段:[100 TO *]查找所有字段值大于或等于100

         

    字段:[* TO *]匹配具有字段

    的所有文档
  • 允许使用纯负面查询(禁止所有条款)。

      

    -inStock:false查找inStock不为假的所有字段值

         

    -field:[* TO *]查找没有字段值的所有文档

  • FunctionQuery语法的一个钩子。当函数包括括号时,将需要引用该函数。

      

    示例:_val_:myfield   示例:_val _:&#34; recip(rord(myfield),1,2,3)&#34;

  • 对任何类型的查询解析器的嵌套查询支持(通过QParserPlugin)。

      

    如果嵌套查询包含保留字符,则通常需要引号来封装嵌套查询。

         

    示例:查询:&#34; {!dismax qf = myfield}现在怎样褐牛&#34;