在solr的分词配置后成功后,在solr后台管理界面进行模糊查询的时候会存在分词匹配个数的问题。打个简单的比方:搜索兰州XXXX酒店。 往往这个时候就有一大批数据出来,只要包含了分词后的词的数据都会搜索出来,给客户的体验不怎么好,本来客户是想只展示兰州的XXXX酒店的,结果北京的、广州的,还有其他名称的酒店都给搜索出来。这个时候就是分词的匹配个数设置的问题了。
首先还是看下分词的配置(IK Analyzer的导入这里不作讲解了,网上很多例子);
在schema.xml增加如下配置:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<dynamicField name="*_sa" type="text_ik" indexed="true" stored="true" />
这里自定了一个类型,在solr中凡是以"_sa"结尾的都将作模糊查询(可以自己定义结尾的类型);
看看分词的结果:
如搜索:hotelname_sa:兰州锦江阳光酒店
理论上客户想要的是包含了这条语句的所有分词的数据,但是solr默认是or的关系,即包含了兰州、锦江、阳光、酒店中任意的词都会搜索出来,显然不是我们所要的。
解决办法有两种(根据各自的需求自己选择):
1、若可以随意选择匹配程度,不需要100%的匹配,可以在查询语句中增加参数:defType=edismax&mm=60%25 (mm是最小匹配的数量,可以是个固定的值,也可也是个百分比)
如:http://192.168.1.211:8787/solr/hotel_info/select?q=hotelname_sa%3A阳光兰州锦江酒店&fl=hotelname_sa&wt=json&indent=true&defType=edismax&mm=60%25
2、在solr 的schema.xml中把 solrQueryParser 的defaultOperator 变成AND (默认这个参数是被注释掉的,找到后改一下就可以了)
<solrQueryParser defaultOperator="AND"/>
如果上面两种都有设置,以第一种优先生效,第二种就被忽略掉了,因此可以根据需要来选择使用
加上后缀后,只有第一种配置生效:
相关推荐
中文分词器的引入解决了英文分词相对简单,而中文以字为基本单位,需要特殊处理才能正确切分的问题。 一、Solr简介 Apache Solr是一款开源的企业级搜索平台,基于Java开发,它可以提供高效的全文检索、 faceted ...
在中文搜索引擎中,由于中文句子没有明显的分隔符,如英文中的空格,因此需要借助分词器将连续的汉字序列切割成一个个有意义的词语,这个过程称为分词。IK分词器(Intelligent Chinese Analyzer for Solr)是针对...
1. 分词器与过滤器:Solr允许自定义分词规则,如英文单词拆分、中文词库过滤等,通过定义分析器链实现。 2. 多字段搜索:Solr支持在多个字段上同时进行查询,提升用户搜索体验。 3. 高亮显示:Solr可以高亮显示查询...
Solr的索引机制允许对这些字段执行复杂的查询操作,如范围查询、模糊查询等。 在索引和搜索之外,Solr还提供了许多高级功能,比如faceting(分面),它允许根据文档的字段值进行动态分组。这种技术在搜索引擎的界面...
- **多种分析器**:提供多种文本分析器,如英文分词器、中文分词器等,满足不同语言的处理需求。 - ** faceted search**:支持分面导航,帮助用户根据分类进行筛选。 - **高亮显示**:突出显示搜索结果中的关键词...
- **Solr**:在Solr中,我们可以配置IKAnalyzer作为默认的分词器,通过修改`schema.xml`文件,指定字段类型的分析器为IKAnalyzer。这样,当索引或查询中文内容时,Solr会自动调用IKAnalyzer进行分词处理。 - **...
2. **分词**:Solr内置了多种分词器,可以对不同语言的文本进行合理的分词处理,如英文的词干提取和中文的词切分,以提高搜索的准确性和召回率。 3. **模糊搜索**:Solr允许进行模糊搜索,支持通配符查询、近似搜索...
- **查询引擎**:提供强大的查询能力,包括布尔操作、模糊查询等功能。 - **索引引擎**:能够快速构建文档索引,并支持高效查询。 - **文本分析引擎**:虽然只支持部分语言,但可以通过自定义扩展来支持更多语言...
- **语言分析**:针对不同语言的特性,如英文的词干提取和中文的分词。 - **多语种索引**:在同一索引中支持多种语言的文档。 7. **数据分析与处理** - **实时更新**:Solr支持实时索引和查询,确保数据新鲜度。...
- 它还提供了对英文、数字及符号的处理能力,以及自定义分词规则的功能,使得用户可以根据具体应用需求进行定制。 2. **Lucene支持**: - Lucene是Apache软件基金会的一个顶级项目,是一款高性能、全文检索库。...
分析器是 Solr 中用于处理文本数据的关键组件,它决定了如何将原始文本转换为可供索引和查询使用的术语。 - **分析器概述**:分析器由分词器和过滤器组成,分词器负责将文本分解成词汇单元(术语),过滤器则对这些...
5. **复杂查询**:支持布尔运算、短语查询、前缀查询、模糊查询等多种查询语法。 6. **定制化**:开发者可以通过自定义分词器、过滤器、查询解析器等来满足特定需求。 总结来说,Lucene 是一个强大且灵活的全文...
3. **查询解析与执行**:Lucene支持多种查询语法,如布尔查询、短语查询、模糊查询等。书中会介绍如何构造查询对象,以及查询执行的流程,包括查询解析、查询优化和匹配度计算。 4. **存储与内存管理**:Lucene使用...
4. **查询处理**:深入解析查询语法,包括标准查询解析器、短语查询、布尔查询、模糊查询、近似查询等,以及如何自定义查询解析策略。 5. **高级特性**:介绍如命中高亮、排序、 faceted search(分面搜索)、实时...
- Lucene.NET支持多种查询类型,如布尔查询、短语查询、模糊查询等。查询执行后,会根据查询的相关度对结果进行评分,评分高的结果优先展示。 5. **更新与删除** - Lucene.NET允许动态更新索引,即添加、修改或...
6. **高级特性**:包括多字段搜索、近似搜索、短语匹配、布尔查询、范围查询以及模糊搜索等,帮助开发者实现更复杂和精准的搜索需求。 7. **实时更新**:讲解如何处理动态数据,实现实时索引和搜索,这对于许多需要...
3. **复杂查询支持(Advanced Query Support)**: 包括短语查询、布尔查询、模糊查询、通配符查询等,4.6.0 版本进一步优化了这些功能。 4. **文档评分(Document Scoring)**: Lucene 使用 TF-IDF(Term Frequency...
2. **查询解析**:Lucene 支持多种查询语法,包括布尔查询、短语查询、模糊查询、范围查询等。查询字符串会被解析为一系列的查询项,然后与索引进行匹配。 3. **评分与排序**:Lucene 使用 TF-IDF(Term Frequency-...
在中国,由于汉字的特性,分词通常比英文更加复杂,需要考虑词语的组合和上下文关系。常用的方法有基于词典的分词、统计分词等。 接下来,匹配算法起着决定性作用。这些算法可能包括精确匹配、模糊匹配、部分匹配等...