如果想让 solr 有更加强大的功能或在查询时做一些特别的处理。可以在 solrconfig.xml 里注册自定义的 QueryParser(查询解析器),这是 solr 1.3 的新功能(插件功能),如:
-
<
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参数。
- 大小: 10.7 KB
分享到:
相关推荐
同时,自定义的 servlet 和 QueryParser 代码可以帮助我们学习如何扩展 Solr 的核心功能,以及如何根据业务需求定制搜索引擎。 总的来说,这个开源项目为学习和实践 Solr 提供了丰富的素材,涵盖了 Solr 与 Lucene ...
Solr的QueryParser将用户输入的查询语句转化为Solr可以理解的结构,然后通过查询优化器生成高效的执行计划。在源代码中,你可以找到关于这些的实现,例如Query类和QueryParser子类。 **分布式搜索** SolrCloud是...
首先,Solr的查询解析是通过queryParser来配置的,通常使用默认配置即可。Solr可以通过web管理界面进行管理和查询,而大多数查询参数可以在web界面找到。在使用Solr进行数据查询时,必须输入查询内容,这通常通过“q...
在Solr中使用中文分词器需要在配置文件中指定。通常在`schema.xml`或`managed-schema`中定义字段类型(FieldType),并设置对应的分词器。例如,使用IK Analyzer: ```xml <fieldType name="text_ik" class="solr....
- **高级查询语法**: 介绍 Solr 的 QueryParser 和 DisMax 查询解析器,以及如何使用它们来构建复杂的查询。 - **结果排序与分组**: 掌握排序和分组查询结果的方法,以及如何实现自定义排序策略。 4. **性能调优**...
在Java环境中使用Solr,通常需要引入一系列的jar包来支持Solr的客户端操作。下面我们将详细探讨这些jar包在Java中与Solr交互时扮演的角色及其重要性。 1. **SolrJ**:Java API for Solr - `solr-solrj.jar`是Solr...
这些插件的jar包会根据实际需求选择,如`queryparser-*.jar`用于自定义查询解析,`solr-cell.jar`支持提取库(Tika)的内容解析。 4. **DataImportHandler (DIH)**:Solr的数据导入处理程序(DIH)允许从外部数据源...
为了实现更复杂的查询逻辑,如模糊匹配和精确匹配,可能需要自定义Solr的QueryParser。例如,可以重写`getFieldQuery`方法,使用`SpanNearQuery`和`PhraseQuery`结合`BooleanQuery`来达到理想的效果。这种方法允许...
除此之外,Solr二次开发还涉及其他常见接口的使用,例如更新文档、删除文档、处理查询结果、处理事务日志、实现自定义插件等。开发者需要熟悉Solr的API,理解请求处理器(RequestHandler)、查询解析器(QueryParser)、...
用户可以自定义QueryParser以支持复杂的查询语法,如布尔运算符、短语匹配等。 3.2 搜索执行 使用IndexSearcher执行Query,得到TopDocs结果集,其中包含了匹配度最高的文档及其分数。通过ScoreDoc可以获取具体文档...
用户还可以自定义QueryParser实现复杂的查询逻辑。 4. **搜索执行**:使用Searcher类进行搜索操作,它基于索引找到最相关的结果。搜索过程涉及术语匹配、评分和排序。TF-IDF(Term Frequency-Inverse Document ...
自定义QueryParser可以处理复杂的查询需求。 5. **搜索过程** - 搜索器(Searcher)执行查询,它通过索引找到匹配的文档,并计算相关度得分。ScoreDoc类存储了每个匹配文档的相关度信息,TopDocs类则提供了排序后...
使用方式和自定义用户词库类似,配置项为: stopwords.path=classpath:stopwords.txt,d:/custom_stopwords_dic 7、自动检测词库变化 可以自动检测自定义用户词库和自定义停用词词库的变化 包含类路径下的文件和...
通过自定义QueryParser或使用Analyzer,我们可以控制查询的解析方式,以满足特定的搜索需求。 二、复杂查询类型 除了基本的单词查询,Lucene还支持更复杂的查询类型,如PrefixQuery(前缀查询)、WildcardQuery...
`IndexWriterConfig` 类用于配置 `IndexWriter` 的行为,例如设置使用的 Analyzer、是否开启自动合并等。 **1.1.5 Document** `Document` 是 Lucene 中表示单个文档的对象,由一个或多个 `Field` 对象组成。 **...
在Lucene中,我们可以使用`QueryParser`类来构造模糊查询的`Query`对象,然后通过`IndexSearcher`执行这个查询,获取匹配的结果。 在提供的压缩包文件中,"src"目录下可能包含了实现上述功能的Java源代码。这些代码...
5. **自定义词典**:如果需要自定义词典,可以将自定义的词典文件(如dict.dic)放在项目的类路径下,或者在初始化IKAnalyzer时指定词典路径: ```java Properties props = new Properties(); props.setProperty(...
**Lucene 搜索引擎简介** ...随着深入,你还可以探索多字段搜索、布尔查询、短语查询、模糊匹配、近似搜索、自定义评分函数等功能,以及如何结合 Solr 或 Elasticsearch 这样的分布式搜索引擎框架来处理大规模数据。
- **QueryParser模块**:实现了查询解析功能,如`lucene-queryparser-4.7.0.jar`。 - **Memory模块**:提供了内存中的索引支持,适用于小型应用或测试,如`lucene-memory-4.7.0.jar`。 - **Miscellaneous模块**:...
同时,也可以与其他工具,如Solr(基于Lucene的全文搜索服务器)或Elasticsearch(分布式全文搜索引擎)结合使用,提升搜索体验。 **总结** Apache Lucene 3.0作为全文检索领域的关键组件,提供了强大的搜索引擎...