关闭

Solr中文字段的查询与字段分词后如何聚合查询的问题

标签: solr聚合查询中文字段分词
1202人阅读 评论(0) 收藏 举报
分类:

问题描述:

问题一:

 比如数据里面有个叫name的字段,存储的是用户名,如果name字段使用的fieldType配置了英文分词,那么我们对于这个字段的查询结果会有错误。比如,查询“张三”,那么像“张”、“三哥”、“张一三”等数据都会被查出来,含有“张”或者“三”的数据都会被查出来,也就是说,配置了英文分词的,对中文默认会是按字分词,并且只要满足一个字就会被匹配上。

问题二:

在对某个使用配置了分词的fieldType的中文字段进行聚合查询的的时候,会按照分词的方式进行聚合,而不是一个字段作为一个整体进行聚合。比如字段内容为:“中国人民”,配置英文分词,没有配置中文分词的,将会按字分词,会按“中”、“华”、“人”、“民”去聚合,配置了中文分词的,有可能会按照“中国”、“人民”去进行聚合,而我们想要的结果是整个字段去进行聚合,所以这都不符合我们的要求。

解决办法:

这两个问题其实是一个问题,solr字段中文分词的问题。针对这个问题有一下两个办法:

(1)、对于中文字段,使用solr定义好了的没有配置英文分词的fieldType,比如string等,而不要用像text_general进行了英文分词的fieldType,这样对对中文就会是一个字段看做一个整体。查询也不会出现错乱,也可用通配符。

(2)、对我们将要包含中文、或者将要进行聚合查询的字段。我们要使用自定义的fieldType,并引用它,样例如下:

<field name="name" type="text_not" store=true index=true />

<fieldType name="text_not" class="solr.TextField" omitNorms="true" />

 fieldType中的name是自定义供field引用的fieldType的名字,class属性目前还不清楚,solr定义好的fieldType都是这样的写的,omitNorms表示该字段是否需要分词,true为不需要,默认是需要,所以不分词的字段可以不明确定义omitNorms属性为true,但是最好自己明确定义,这样让schema.xml明确些,方便阅读。


0
0
查看评论

solr中文查询时自动分词

之前在查询时都是先调用分词的方法将词分好,再调用查询方法。 今天看到一个方法,来自http://grokbase.com/t/lucene/solr-user/1155x88nt9/why-query-chinese-character-with-bracket-become-phrase-que...
  • lzj0327
  • lzj0327
  • 2016-05-19 11:29
  • 1874

Solr--分词与搜索

1 .1在managed-schema文件夹中添加分词器。 现在Solr已经更新到了6.6,网上很多分词器出现不兼容的情况,在网站找到了半天的解决方案。看到一位大神,找到原因后更改源码,重新打包,放在/webapps/solr/WEB-INF/lib/ 下,感谢博主写了大段的文章阐述原因及代码分析...
  • BtWangZhi
  • BtWangZhi
  • 2017-08-22 23:46
  • 216

solr分词只能全词匹配怪现象

现象: 例如ik分词,安装配置后,可以正常分词,如下图所示Index和Query都没问题了,十分高兴吧! 随后,创建collection,导入数据,再尝试搜索。如下图所示,我们搜索“第四次会议”,可以看到有3条记录,还有点小兴奋! 既然已经分词了,应该可以搜索非完全匹配的,如下图所...
  • allthesametome
  • allthesametome
  • 2015-07-22 17:05
  • 4196

solr查询不使用query analyzer中文分词的问题解决

schema.xml已配置query的中文分词器,但搜索的结果不尽如意,solr并没有按照分词来进行搜索。比如搜索“我要吃饭了”,并没有把包含“吃饭”的文档给搜索出来。解决过程如下: 1.query analyzer使用IK,配置如下: Xml代码   ana...
  • skiof007
  • skiof007
  • 2012-02-24 16:09
  • 3870

solr模糊查询

今天重点讲模糊检索中文名字 solr对中文进行分词,如果不是一个词,可能会丢失字,然后在查询名字的,会感觉不太准确。 solr里面提供了很多查询匹配的方法例如: 1.使用*:resume_keyword:*王* 2.使用AND 拼接查询 keywords:*建筑* AND perso...
  • MeiX505
  • MeiX505
  • 2017-06-15 14:41
  • 3666

配置solr使其支持中文检索

默认情况下 Apache Solr 是不支持中文检索的,如果文档中包含中文,必须用完整的一句中文才能检索出内容。下面以 Apache Solr 的演示程序为例,注意:粗体部分是需要修改的地方。找到如下三行:        ...
  • kerrywang
  • kerrywang
  • 2009-07-10 14:01
  • 2217

solr中文同义词检索的配置讲解

1配置同义词首先是要基于中文分词的基础上进行的,如果检索关键词不能够进行中文分词那么是查询不到相关的同义词的(如果solr没有配置同义词,请参考附录进行配置,配置完成后进行后续操作)   2 如果是IKAnalyzer中文分词修改fileType text_ik,如果是mmseg4j中...
  • yeluodeshunjian
  • yeluodeshunjian
  • 2016-12-26 13:51
  • 2265

使用Solrj 获取语句分词结果的代码

import java.util.ArrayList; import java.util.Iterator; import java.util.List;import org.apache.log4j.Logger; import org.apache.solr.client.solrj.impl....
  • qq_20261343
  • qq_20261343
  • 2016-02-21 13:13
  • 1989

solr查询语法

还以为网上的solr最基础的东西应该很多,结果发现je这边都是一些部署的资料。到没用人给最基本的查询语法。在做查询时十分吃力,自己整理了几个例子来分享下,希望别人不要再走弯路。   首先说下,查询都是基于solrj。如果不清楚solrj。可以当做是对solr查询语句的一个api封装。 ...
  • qq_22929803
  • qq_22929803
  • 2015-07-17 12:16
  • 4265

solr几种分词比较

·什么是Solr? Solr是基于lucene搭建的java搜索引擎服务端,是一个搜索中心式的程序。 ·Solr的组成: Solr由一个服务端程序,若干个搜索模块core,和一套java客户端组件Solrj组成。core运行在服务端之上,可以把一个core理解成一个网站的搜...
  • joeyon
  • joeyon
  • 2014-12-11 09:01
  • 2125
    个人资料
    • 访问:5807次
    • 积分:162
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论