List ls=new List大量数量模糊查询效率问题!

编程有钱人了 2019-04-19 11:47:18
List<string> ls=new List<string>有大约300多万个汉字短语或者名词,不重复数据。
ls.Where(q=>q.Contains("A"));模糊查询比较慢。

我能想到的别的解决方案:
1:Lucene.Net 创建索引后,精确精确查询很快,模糊查询也很慢,
2:Redis 存储后,精确查询很快,模糊查询也慢。
3:SqlServer 创建索引 like 'A%' 这种查询索引生效,如果是 like '%A%',索引是失效的。

还有别的好办法吗?
...全文
577 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jx315425246 2019-05-01
  • 打赏
  • 举报
回复
如果一个汉字短语占20个字节,用内存40M,可以用List写,效率不会低,1000Mhz 8位的CUP按顺序查找,1秒可以遍历1/5,用不到你想的这些吧
  • 打赏
  • 举报
回复
如果你查询文字“A”,查询地效率是 o(1)。前提是你要创建“倒排索引”。
  • 打赏
  • 举报
回复
引用 9 楼 编程有钱人了 的回复:
反向索引是怎么搞的?
学一下数据结构知识。
正怒月神 2019-04-30
  • 打赏
  • 举报
回复
引用 7 楼 stherix 的回复:
[quote=引用 6 楼 编程有钱人了 的回复:] [quote=引用 4 楼 stherix 的回复:] 模糊查询不可能快的 无论采用什么结构存储 都要遍历整个列表 %A这样的查询,索引也无能为力
看来只能用 like 'A%' 这种方案了,起码索引有效 不知道百度 查询 下拉框 智能感知用的什么方案?[/quote] 百度也是类似这种 比如你搜 常 字 他会显示出 各种 常 长 开头的 但是绝不会显示出 经常 异常 这种词来[/quote] 恩,因为这样就能用到索引了。xxx%这种。
Acme_Thanatos 2019-04-30
  • 打赏
  • 举报
回复
拆分,多线程查吧
闭包客 2019-04-19
  • 打赏
  • 举报
回复
你使用自然语言处理,是达不到 Contains 函数的效果的,要达到 Contains 函数的效果,需要一个完全的反向索引。 比如在我的网站 http://lab.bibaoke.com/alexa/search?key=a 这样就是搜索域名包含 a 的网站。
stherix 2019-04-19
  • 打赏
  • 举报
回复
引用 6 楼 编程有钱人了 的回复:
[quote=引用 4 楼 stherix 的回复:] 模糊查询不可能快的 无论采用什么结构存储 都要遍历整个列表 %A这样的查询,索引也无能为力
看来只能用 like 'A%' 这种方案了,起码索引有效 不知道百度 查询 下拉框 智能感知用的什么方案?[/quote] 百度也是类似这种 比如你搜 常 字 他会显示出 各种 常 长 开头的 但是绝不会显示出 经常 异常 这种词来
编程有钱人了 2019-04-19
  • 打赏
  • 举报
回复
引用 4 楼 stherix 的回复:
模糊查询不可能快的 无论采用什么结构存储 都要遍历整个列表 %A这样的查询,索引也无能为力
看来只能用 like 'A%' 这种方案了,起码索引有效 不知道百度 查询 下拉框 智能感知用的什么方案?
stherix 2019-04-19
  • 打赏
  • 举报
回复
如果你正常分词成功 是应该不需要用string.Contains 或者like这种东西 直接用等于就行了
stherix 2019-04-19
  • 打赏
  • 举报
回复
模糊查询不可能快的 无论采用什么结构存储 都要遍历整个列表 %A这样的查询,索引也无能为力
编程有钱人了 2019-04-19
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
Lucene.Net 创建索引后,精确精确查询很快,模糊查询也很慢 那估计是你没有分词或者分词分得不好
我用的默认分词器,没有用盘古分词器,听说盘古分词效率不如默认的。
闭包客 2019-04-19
  • 打赏
  • 举报
回复
你可以根据自己的需要,做一个反向索引。
threenewbee 2019-04-19
  • 打赏
  • 举报
回复
Lucene.Net 创建索引后,精确精确查询很快,模糊查询也很慢
那估计是你没有分词或者分词分得不好
  • 打赏
  • 举报
回复
模糊 哪有快的。 都是%% 的查询
一叶无秋 2019-04-19
  • 打赏
  • 举报
回复
300万条数据姘均分,均分后在线程去找,
秋的红果实 2019-04-19
  • 打赏
  • 举报
回复
用arrayList更好些
bloodish 2019-04-19
  • 打赏
  • 举报
回复
引用 10 楼 bloodish 的回复:
你既然舍得用List,又不含重复数据,干嘛不选Dictionary?
Sorry,没细看,你需要的是模糊查找
bloodish 2019-04-19
  • 打赏
  • 举报
回复
你既然舍得用List,又不含重复数据,干嘛不选Dictionary?
编程有钱人了 2019-04-19
  • 打赏
  • 举报
回复
引用 8 楼 闭包客 的回复:
你使用自然语言处理,是达不到 Contains 函数的效果的,要达到 Contains 函数的效果,需要一个完全的反向索引。 比如在我的网站 http://lab.bibaoke.com/alexa/search?key=a 这样就是搜索域名包含 a 的网站。
反向索引是怎么搞的?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧