Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中搜索引擎的数据结构?_Java_Data Structures - Fatal编程技术网

JAVA中搜索引擎的数据结构?

JAVA中搜索引擎的数据结构?,java,data-structures,Java,Data Structures,我是MCS的二年级学生。我正在用Java做一个项目,在这个项目中我有不同的图像。为了存储对IMAGE-1的描述,我将ArrayList命名为IMAGE-1,类似地,对于IMAGE-2 ArrayList IMAGE-2n,依此类推 现在我需要开发一个搜索引擎,在其中我需要找到一个描述与搜索引擎中输入的单词匹配的所有图像 对于EX如果我输入“computer”,那么我应该能够找到描述中包含“computer”的所有图像 所以我的问题是 我应该如何有效地执行此操作? 我应该如何维护所有这些 Arra

我是MCS的二年级学生。我正在用Java做一个项目,在这个项目中我有不同的图像。为了存储对IMAGE-1的描述,我将ArrayList命名为IMAGE-1,类似地,对于IMAGE-2 ArrayList IMAGE-2n,依此类推

现在我需要开发一个搜索引擎,在其中我需要找到一个描述与搜索引擎中输入的单词匹配的所有图像

对于EX如果我输入“computer”,那么我应该能够找到描述中包含“computer”的所有图像

所以我的问题是

我应该如何有效地执行此操作?
我应该如何维护所有这些 ArrayList,因为我可以拥有100个 这样的还是我应该用另一个 数据结构而不是ArrayList


我建议您使用哈希表类或将内容组织到树中以优化搜索。

我建议您使用哈希表类或将内容组织到树中以优化搜索。

如果您有少量图像和简短描述(<1000个字符),将它们加载到数组中,并使用
String.indexOf()
(即数组中的一个条目==一个完整的图像描述)搜索单词。这对于(比如)少于10000张的图像来说是足够有效的

使用
toLowerCase()
折叠字符的大小写(这样用户在键入“Computer”时可以找到“Computer”)
String.indexOf()
也适用于短词(使用“comp”查找“Computer”或“compare”)


如果你有很多图像和长描述,和/或你想给你的用户一些搜索的便利(像谷歌一样),那么使用。

如果你有少量图像和短描述(<1000个字符),将它们加载到一个数组中,并使用
String.indexOf()
(即数组中的一个条目==一个完整的图像描述)。这对于(比如)少于10000个图像来说足够有效

使用
toLowerCase()
折叠字符的大小写(这样用户在键入“Computer”时会找到“Computer”)。
String.indexOf()
也适用于短单词(使用“comp”查找“Computer”或“compare”)


如果你有大量的图片和详细的描述和/或你想给你的用户一些舒适的搜索(像谷歌一样),那么就使用。

没有简单易用的数据结构支持高效的全文搜索

但是你真的需要效率吗?这是桌面应用还是web应用?在前一种情况下,不要担心效率,现代CPU可以在几分之一秒内搜索兆字节的文本-只需使用
String.contains()
(或允许更灵活搜索的regexp)查看所有描述即可

如果你真的需要效率(比如一个很多人可以同时搜索的网络应用程序),那就去看看吧


至于你的ArrayList,用一个来描述单个图像似乎很奇怪。为什么是列表,索引代表什么?行?如果是,除非你真的需要直接访问行,否则用一个简单的字符串替换列表-它可以包含换行符。没有简单易用的数据结构可以支持高效的全文搜索

但是你真的需要效率吗?这是桌面应用还是web应用?在前一种情况下,不要担心效率,现代CPU可以在几分之一秒内搜索兆字节的文本-只需使用
String.contains()
(或允许更灵活搜索的regexp)查看所有描述即可

如果你真的需要效率(比如一个很多人可以同时搜索的网络应用程序),那就去看看吧


至于你的ArrayList,用一个来描述一个图像似乎很奇怪。为什么是列表,索引代表什么?行?如果是,除非你真的需要直接访问行,否则用一个简单的字符串替换列表-它可以包含换行符。

一个简单的实现是标记化描述并使用
映射
存储令牌的所有项目

建筑:

for(String token: tokenize(description)) map.get(token).add(item)
(由于一个令牌可以找到多个条目,因此需要一个集合。代码中缺少集合的初始化。但是想法应该很清楚。)

使用:

List result=map.get(“计算机”)
在这种情况下,通用HashMap实现并不是最有效的。当您开始遇到内存问题时,您可以研究一种更有效的树实现(如-)


下一步可能是使用一些(内存中的)数据库。这些数据库可能是关系数据库(),也可能不是关系数据库()。

一个简单的实现是标记化描述,并使用
映射来存储标记的所有项

建筑:

for(String token: tokenize(description)) map.get(token).add(item)
(由于一个令牌可以找到多个条目,因此需要一个集合。代码中缺少集合的初始化。但是想法应该很清楚。)

使用:

List result=map.get(“计算机”)
在这种情况下,通用HashMap实现并不是最有效的。当您开始遇到内存问题时,您可以研究一种更有效的树实现(如-)


下一步可能是使用一些(内存中的)数据库.

Lucene是一头大象,相信我。但确实值得一试。谢谢……但描述可能相当大,即超过1000行,因此可以将其存储在简单数组中?使用字符串有什么问题?数组将需要更多内存,搜索速度将变慢,所以为什么要使用一个?Lucene是一头大象,相信我e、 但确实值得一试。谢谢……但描述可能相当大,即超过1000行,因此可以将其存储在简单数组中?使用字符串有什么问题?a