Java之利用Filter实现两组关键词组合查询

本文介绍了如何使用Java结合Solr和Lucene处理复杂的组合查询需求。针对客户名称和自定义负面关键词,通过Filter避免查询字符串溢出,确保含有更多负面关键词的文档在搜索结果中排名更靠前。文章详细阐述了解决步骤,包括添加关键词到分词器、创建带权重的Lucene索引、执行客户名称查询以及应用过滤器和高亮显示。最终实现有效查询并返回了相关记录。
摘要由CSDN通过智能技术生成

1. 需求

根据客户名称,查询客户网络上面的负面信息。如客户名称为”盐城 盐城市“,并自定义负面关键词“贪污 受贿 被曝 曝光 小三 裸照”等,则是要求将包含这些负面关键词且包含客户名称的信息查询出来。注意事项:客户名称可定义多个(10个以内),负面关键词可以定义多个(300个以内)。

分析

如果只用一个参数q去定义查询,很可能查询字符串长度会溢出,查询q应该形如:

((盐城 OR 盐城市) AND 贪污) OR ((盐城 OR 盐城市) AND 受贿)…

所以本文采用Filter的形式来解决这一问题。

2. 解决步骤

  • 步骤一:将所需要查询的客户名称、负面关键词加入到中文分词器词典文件中;(本文略)

只有中文能够将这些关键词正确分词,其它各项操作才能顺利进行。

  • 步骤二:用爬虫工具将网络上的信息抓取下来后,在创建Lucene索引的时候, 将包含负面关键词的文档自定义分值(包含负面关键词越多,分值越高);(说明略,可以参考:Lucene4.1:运用中文分词器创建索引,给指定文本增加boost值)
    这样可以保证查询时,包含负面关键词越多的文档,查询时排在越前面。
  • 步骤三:按客户名称查询(如:盐城 盐城市);
    正常查询输入。
  • 步骤四:查询时加入过滤器(Filter),过滤器的输入就是负面关键词列表;
    加入过滤器后,实现的查询结果类似于:((盐城 OR 盐城市) AND 贪污) OR ((盐城 OR 盐城市) AND 受贿)…
  • 步骤五:自定义高亮结果。
    因为客户名称需要高亮,负面关键词也需要高亮,所以需要自定义高亮显示。

3. SlorJ实现代码

package com.clzhang.sample.solr;

import java.io.*;
import java.util.*;
//加入Java开发交流君样:756584822一起吹水聊天
import org.apache.lucene.analysis.Analyzer;
i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值