用什么数据库可以方便的找出重复出现的词有哪些

zgw06629 发布于 01/12 14:45
阅读 231
收藏 0

Wanda相关的词汇在列表中重复出现16次,有dalian wanda group, wanda group, wanda, Wanda commercial等等

相同的情况还有HNA, JD, Suning

假设 用的是mysql 数据库 name保存名称 name like '%wanda%' 来找出这一批词汇 但是这是在预先知道wanda有重复的情况下 

问题是: 怎么知道 哪些词有重复呢 怎么找出Wanda HNA JD Suning 这些存在重复的词汇呢 像这种需求 适合用什么数据库来支持呢 

加载中
0
kakai
kakai

适合用搜索引擎来做

kakai
kakai
回复 @zgw06629 : elasticsearch-rest-high-level-client这个不错,es官方的客户端访问组件。
zgw06629
zgw06629
如果用elasticsearch 对应的搜索Api是什么呢
0
S
SHA-256
量大的话用elasticsearch,量小的话根据lucene自己定制一个也可以
0
ArchitectureMaster
ArchitectureMaster

 题主说的这个问题在数据库系统里有一个非常简单的做法就是做全文索引进行存储。这里的全文索引是指的从数据由程序到数据库储存到数据提取的一整套技术!

1.传统的数据存取像题主这样建一个字段为content 类型为varchar或text的字段,然后把诸如:dalian wanda group, wanda group, wanda, Wanda commercial 一段内容直接insert into content字段里。

这样查询再使用like查询就可以了,但这种做法是不可取的。

2.可以使用更有效的一种方式就是全文索引技术,下面来讲述如何将数据存入:

1)dalian wanda group, wanda group, wanda, Wanda commercial 这段内容存储到数据库,首先会

将存入的这段话使用英文分词系统分成关键词列表。如wanda这个词是特别关注,那就只需要在词库里加入,这样一段文字插入会分成两部分,一部分将全文写入,另一部分则是分词之后的关键词列表

2)所以数据库里会有对应的至少三张表存在:1、内容表用于存放你的所有正文内容。2、关键字表。

3.关键字内容关系表。下面是表结构:

create table content (
content_id           VARCHAR(36)                    not null,
content              LONG VARBINARY,
primary key (content_id)
);

create unique index content_PK on content (
content_id ASC
);

create table keyword (
kwId                 VARCHAR(36)                    not null,
keyword              VARCHAR(255),
primary key (kwId)
);

create unique index keyword_PK on keyword (
kwId ASC
);

create table kw_content (
content_id           VARCHAR(36)                    not null,
kwId                 VARCHAR(36)                    not null,
count                DECIMAL,
primary key (content_id, kwId),
foreign key (content_id)
      references content (content_id),
foreign key (kwId)
      references keyword (kwId)
);

create unique index kw_content_PK on kw_content (
content_id ASC,
kwId ASC
);

create  index kw_content_FK on kw_content (
content_id ASC
);

create  index kw_content2_FK on kw_content (
kwId ASC
);

2.正文内容插入到内容表,同时把关键词插入到keyword表,这时如果有词已经插入就不插入。

3.建立内容表与关键字表关系。在count里写出现的次数。

在写入文本数据之前需要对文本数据用分词软件进行处理,类似像盘古分词这类,然后这时就可以把这篇文章中所有的关键词提取出来,并且把次数记录下来并写入关系表、关键词表(新词则写入已存在则将已有的ID取出)到关系表里进行写入。

查询的时候并不是直接like content表而是去用查关系表,并left join 关键字表。再用查询的关键词wanda去等于keyword字段。这时速度比直接like要快至少100倍。而且直接可以把重复次数查出来就可以了。

 

 

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部