Solr实现类似MySQL的LIKE查询功能
2020-03-18 07:33
441 查看
最近在工作中遇到需要对大文本进行关键词查询。需要实现的效果为,当用户输入一个字或者一个词,要搜出包含这个字或者词的所有内容。就相当于MySQL
的LIKE
查询效果一样。
在这种场景下,第一时间想到的肯定是直接使用MySQL
存储,然后进行查询就可以了,完全符合业务需求。但是经过尝试,当数据量比较大的时候,查询的速度慢得让人根本无法接受。
于是只能考虑其他方案,由于和搜索有关,于是想到了之前使用过的Solr
。经过一系列折腾,最后得出最终方案如下。
schema
设计的时候,需要自定义字段类型,使用solr.NGramTokenizerFactory
分词器,并且将分片参数设置成1。
<fieldType name="text_ng1" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="1"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="1"/> </analyzer> </fieldType>
- 对需要进行查询的字段设置成自定义的类型。
<field name="question_content_list" type="text_ng1" indexed="true" stored="true" required="false" multiValued="true" />
- 查询条件中需要对关键字加双引号,表示不对查询词进行分词。
/select?q=question_content_list%3A"空间"&start=0&rows=1&wt=json&indent=true
- 查询结果响应测试。
{ "responseHeader": { "status": 0, "QTime": 1, "params": { "q": "question_content_list:\"空间\"", "indent": "true", "start": "0", "rows": "1", "wt": "json" } }, "response": { "numFound": 62, "start": 0, "docs": [ { "question_content_list": [ "18088", "qq空间", "http://photo.qq.com" ], "question_id": "9DSOPHKVYF4G", "_version_": 1661304065051590660 } ] } }(window.slotbydup = window.slotbydup || []).push({ id: "u5894387", container: "_0hv0l6ey3zro", async: true });
相关文章推荐
- Solr部署,连接mysql,实现模糊查询功能,以及按照距离排序功能
- 天易10----js实现的类似百度地图(带查询功能)
- mysql记录集中记录序号,MySQL中实现rownum功能类似的语句
- jsp操作MySQL实现查询、插入与删除功能(query、insert、delete)
- 【greenplum】 获取表结构,实现类似mysql show create table 功能
- SQLServer 中实现类似MySQL中的group_concat函数的功能
- jsp操作MySQL实现查询/插入/删除功能示例
- mysql 数据库 类似like 查询 find_in_set
- MYSQL的包含查询,类似like,又不同于like
- MySQL实现类似Oracle中的decode()函数的功能见解 乐杨俊
- 使用全文索引技术实现高效的like模糊查询功能
- MySQL实现类似Oracle中start with功能
- MySQL中数据结果集分页功能的实现方法;数据库查询返回特定结果即分页查询
- JDBC连接MySQL(实现查询数据库功能)
- 用Ajax结合div来实现的查询控件(类似51job里面的职位搜索功能)
- 使用全文索引技术实现高效的like模糊查询功能
- Mysql实现文章查询上一篇和下一篇功能,附sql语句?
- mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能
- mysql中使用tee实现类似oracle spool功能
- PHP实现MYSQL的查询功能