1

我需要将用户将搜索的产品名称与可用产品进行比较。我有存储在 MySQL 数据库中的产品名称。我正在收集所有名称,并在我的 java 服务启动时将其带到应用程序级别(java)。

现在我的字符串比较场景是这样的:

Available product names:
1) Samsung galaxy s2
2) Samsung galaxy s3
3) Samsung galaxy s4

User input1: galaxy s3 - Then in this scenario my 2nd result should come first as it has 2 matching keywords 'galaxy' and 's3', where other 2 has only 1 matching keyword 'galaxy'.

User input2: s3 - Then here only 2nd result should come, because the other 2 has no matching key word.

User input3: samsung - Then here all three results should come.

谁能建议在Java中哪种算法适合这个?还有一件事,将所有产品名称从 MySQL 带到应用程序级别(java)是正确的方法吗?或者我也可以在 MySQL 级别做吗?(PS:我不想在 MySQL 端使用 like 查询,因为它会很慢)

4

4 回答 4

1

给你一些在你的项目中开发搜索功能的提示:

  • 使用Lucene,只需使用 API 或下载源代码并使用自定义评分算法。
  • 在您自己的应用程序中开发term weightingstring similarity算法,它将提高您的搜索准确性。(这两个概念你要搜索一下,或者看看《信息检索》这本书,对你很有帮助。)
  • 使用mysqlSELECT ... FROM ... WHERE field LIKE '%keyword%'模糊搜索(记得先创建索引),应用上面的term weightingorstring similarity算法对查询结果进行排序。
于 2013-11-25T07:17:13.303 回答
0

用户输入中的单词用空格键分隔,所以将它们分成srstrings,然后使用string.contains(),首先匹配最长的字符串,这会给你排名。

于 2013-11-25T07:00:35.420 回答
0

我解决了我使用 trie( Trie ) 的相同问题并存储了我在 trie 中拥有的所有字符串组合,然后您可以在 trie 中搜索用户输入

注意:将所有组合存储在 trie 中不是一个好方法。但是将所有组合存储在 trie 中将有助于以您想要的方式进行搜索,否则它将是前缀搜索。

于 2013-11-25T07:09:36.630 回答
0

这不是正确的方法,请为您的搜索提出查询

例如:

SELECT productname FROM product WHERE productname='%samsung%';

总是只获取需要的记录而不是所有记录。

于 2013-11-25T07:10:29.663 回答