• solr 使用自定义的 QueryParser


    如果想让 solr 有更加强大的功能或在查询时做一些特别的处理。可以在 solrconfig.xml 里注册自定义的 QueryParser(查询解析器),这是 solr 1.3 的新功能(插件功能),如:

    1. <queryParser name="mylucene" class="org.apache.solr.search.MyQParserPlugin" />  

    query parser 插件时,要先了解下 solr 这方面的结构,下面的QueryParserPlugin 相关类的类图:

    写自己的 query parser 插件,基本需要写加个类,MyQParserPlugin、MyQParser、MySolrQueryParser分别扩展QParserPlugin、QParser、SolrQueryParser。

    默认情况:solr 是用 OldLuceneQParser 来解析查询,solr 源码中 OldLuceneQParser与LuceneQParser是LuceneQParserPlugin内部类。

    扩展QParser时,可以复制 OldLuceneQParser 与 LuceneQParser,然后稍加改一个(把 SolrQueryParser 改为 MySolrQueryParser,还有一些访问属性相关的调整),然后你可以在MySolrQueryParser “胡作非为”,与可以在 MyQParser 查询前做一些特别的处理。

    最后打包,个人用这三个类独立打包成my-qparser.jar 放到 solr.home/lib目录下,如果没有手动建一个。

    写好了扩展怎么用呢?solr 有一个 defType的参数,比如:你注册自己的QParserPlugin后,如名为mylucene,那么 defType=mylucene。当然还可以这样:在q参数值前面加{!mylucene}。个人认为用defType比较好,这样其它调用的地方不用 改,做到透明——在 standard requestHandler 里加默认的defType参数。

    现在可以看下是否自己的查询解析器正常工作:http://localhost:8080/solr/select?indent=on&version=2.2&q=solr&start=0&rows=10&fl=*%2Cscore&debugQuery=on

  • 相关阅读:
    C++程序代写实现HashSet class
    EL表达式
    Hibernate的事务管理
    ThreadLocal理解
    SOA框架
    JVM垃圾回收机制
    Htpp通讯协议详解
    Android模拟器使用SD卡
    android 开发-HttpClient状态码定义
    android 开发-文件存储之读写sdcard
  • 原文地址:https://www.cnblogs.com/wycg1984/p/1567654.html
Copyright © 2020-2023  润新知