这次要分享的是关于近期在工作中的一个业务需求实现
需求-------------------------
需求很简单,简化来说就是需要对一个title字段,根据中文拼音的首字母进行排序
实现-------------------------
理所当然的想到直接用solr的sort功能对title desc排序,发现结果不如预期
"response": {
"numFound": 7,
"start": 0,
"docs": [
{
"title": "二维火"
},
{
"title": "a城西银泰"
},
{
"title": "?桔子里"
},
{
"title": "1三益里"
},
{
"title": "/b古翠路"
},
{
"title": " 翠苑四区"
},
{}
]
}
所以,采用新建一个title_fc的字段,存储title字段的第一个字的拼音首字母,打开docValues=true,对该字段进行排序。
该方法实现也很简单,首先在schema.xml文件中声明一个title_fc字段
<field name="title_fc" type="first_character" indexed="false" stored="true" docValues="true"/>
<fieldType name="first_character" class="com.dfire.fieldtype.FirstCharacter" precisionStep="0" positionIncrementGap="0"/>
<copyField source="title" dest="title_fc"/>
以上三行代码就是实现新字段的注册,并将title中的内容copy到新字段中。
FirstCharacter是自己实现的字段类型,继承TrieIntField,将注入的title值,用pinyin4j.jar包翻译为拼音类型,并取首字母的ascii码值,作为新字段的值,再对这个字段进行排序就可以了,实现效果如下。
"response": {
"numFound": 7,
"start": 0,
"docs": [
{
"title": "/b古翠路",
"title_fc": 126
},
{
"title": "?桔子里",
"title_fc": 126
},
{
"title": "二维火",
"title_fc": 101
},
{
"title": " 翠苑四区",
"title_fc": 99
},
{
"title": "a城西银泰",
"title_fc": 97
},
{
"title": "1三益里",
"title_fc": 49
},
{}
]
}
实现后跟业务沟通发现需求不止需要第一个字的汉字首字母,还需要记录所有字的拼音首字母,从而当第一个字母相同时进行比较后续的字母。
实现这个一开始不知道怎么下手,无法再用ascii的方法记录值,也不能用相加的方法。后来在和百岁沟通后,决定用int的32个bit记录几个值。
具体原理为,例如一个title的值为“二维火”,拼音首字母为ewh,则记录三个字母的ascii码和a的差值,则为5,23,8,对应的二进制的为00101,10101,01000,则用一个int记录就是001011010101000,即5800,每个title进行这种转换,则可以根据每个字母进行转换了。结果如下
"response": {
"numFound": 7,
"start": 0,
"docs": [
{
"title": "1三益里",
"testfield": 474845952
},
{
"title": "?桔子里",
"testfield": 371827456
},
{
"title": "/b古翠路",
"testfield": 369651916
},
{
"title": "二维火",
"testfield": 89948160
},
{
"title": " 翠苑四区",
"testfield": 56964160
},
{
"title": "a城西银泰",
"testfield": 17663572
},
{}
]
}
分享到:
相关推荐
基于solr-geo空间搜索 1、Solr的schema.xml配置 定义坐标field 2、Solr的data-config.xml配置 建立索引 3、java查询语法 坐标距离、分页、排序
完成这些步骤后,重启Solr服务器,你的Solr实例现在应该已经配置好使用IKAnalyzer进行中文分词。你可以通过Solr的管理界面创建新的索引字段,测试分词效果。 总之,Solr是一个强大的搜索引擎,通过适当的配置和扩展...
1. **下载分词库**:根据需求选择合适的中文分词库,如IK Analyzer,下载对应的Solr版本的分词插件。 2. **解压分词库**:解压缩下载的分词库,通常会得到一个包含`lib`和`conf`目录的结构。 3. **拷贝到`WEB-INF`...
Solr 6.0 中文分词是针对中文文本处理的重要功能,它是搜索引擎优化的关键环节。Solr 是一个流行的开源全文检索服务器,由 Apache 软件基金会开发,用于提供高效、可扩展的搜索和分析服务。在处理中文文档时,由于...
Solr4.1 + IK中文分词是针对Apache Solr搜索引擎的一个重要组合,它使得在中文环境下进行全文检索和分析变得更加高效和精确。Apache Solr是一个开源的企业级搜索平台,基于Lucene库,提供了高性能、可扩展的全文索引...
"solr中文分词高版本"的标题表明我们在这里讨论的是适用于Solr 6.5及以上版本的中文分词解决方案,因为默认的Solr分词器可能不支持这些较高版本,或者在使用过程中会出现问题。 描述中提到的“网上提供的solr中文...
Solr,全称为Apache Solr,是一款开源的全文搜索引擎,广泛应用于电商、新闻、文档检索等领域。它提供了高效、可扩展的搜索与分析能力。在电商领域,搜索结果的排序和打分对于用户体验至关重要,因为它直接影响到...
Solr在其之上添加了更多高级特性,如 faceting(分面搜索),highlighting(高亮显示),以及更复杂的查询语法。 4. **配置文件**:压缩包中的配置文件包括`solrconfig.xml`和`schema.xml`。`solrconfig.xml`定义了...
ikanalyzer 是一个专门为Java开发的中文...总之,ikanalyzer-solr8.4.0 是 Solr 8.4.0 版本下用于中文分词的重要工具,通过合理的配置和使用,可以显著提高 Solr 对中文文本的处理能力,从而提升搜索质量和用户体验。
Solr中文分词器是Apache Solr搜索引擎系统中用于处理中文文本的核心组件,它使得Solr能够对中文文档进行有效的索引和搜索。在Solr中,分词器(Tokenizer)是分析器(Analyzer)的一部分,负责将输入的文本拆分成可被...
Solr是Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,是Lucene的一个扩展,提供了更为方便和强大的搜索功能。在Solr 6.2.0版本中,这个强大的分布式搜索引擎引入了许多新特性和改进,使其在处理大...
- **相关度排序:** Solr可以根据文档与查询的相关程度对其进行排序,确保最相关的文档被优先展示给用户。 #### 二、为什么要使用搜索引擎? **2.1 搜索引擎的应用背景** - **数据管理和检索的需求:** 在现代...
ikanalyzer-solr中文分词包是专门为Apache Solr设计的一款强大的中文分词工具,它在处理中文文本时能够有效地进行词语切分,提高搜索准确性和效率。标题中提到的"ikanalyzer-solr中文分词包兼容solr7.5"意味着这个...
### SOLR中文文档知识点概述 #### 一、Lucene与SOLR的关系及全文搜索概念 1. **Lucene原理**:Lucene是Apache软件基金会4 Jakarta项目中的一个子项目,是一个高性能、全功能的文本搜索引擎库。它不是一个完整的...
Ik中文分词器则是为了解决中文文本处理中的分词问题,它是目前Java领域最活跃、最常用的中文分词组件之一。这个压缩包"solr安装包与ik中文分词器.zip"包含了这两个关键组件,旨在帮助用户快速搭建一个支持中文搜索的...
在中文搜索中,分词是至关重要的一步,它将连续的汉字序列切分成具有独立意义的词语。Solr支持多种分词器,例如ikanalyzer、smartcn等,这些分词器能够对中文文本进行有效的分词处理,提高搜索的准确性和覆盖率。在...
对于中文搜索需求,需要配置 Solr 的中文分词器。具体步骤如下: 1. **修改 schema.xml 文件**:打开 `D:\solr\home` 目录下的 schema.xml 文件,增加或修改以下字段类型定义: ```xml ...
Solr,全称为Apache Solr,是一款开源的企业级搜索引擎,由Apache软件基金会开发。...提供的文档“SOLR中文教程.doc”和“Solr4.7中文学习手册.docx”将更深入地阐述这些概念和操作方法,为开发者提供详尽的指导。
6. **排序与评分**:除了基于相关性排序外,Solr还可以根据其他字段或自定义函数进行排序。同时,可以通过修改TF-IDF评分模型或者实现自定义评分函数来调整搜索结果的排名。 7. **分布式搜索**(SolrCloud):...