Java中的字符串比较,我应该使用哪种算法?

Java中的字符串比较,我应该使用哪种算法?,java,mysql,algorithm,string-comparison,knuth-morris-pratt,Java,Mysql,Algorithm,String Comparison,Knuth Morris Pratt,我需要将用户将搜索的产品名称与可用产品进行比较。我有存储在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

我需要将用户将搜索的产品名称与可用产品进行比较。我有存储在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级别上做吗?(注:我不想在MySQL端使用like查询,因为它会非常慢)

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

用户输入中的单词用空格键分隔,所以将它们划分为srtring,然后使用string.contains(),首先要匹配的最长字符串,这将为您提供排名。

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

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

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


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

这不是一种合适的方式,请将查询用于您的搜索

例如:

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

始终只获取需要的记录,而不是所有记录。

这不是一种正确的方法,请将查询用于搜索

例如:

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

始终只获取需要的记录,而不是所有记录。

为您的项目提供一些开发搜索功能的提示:

  • 使用,只需使用API或下载源代码并使用自定义评分算法
  • 在您自己的应用程序中开发
    术语权重
    字符串相似性
    算法,这将提高您的搜索精度。(你必须搜索这两个概念,或者看看这本书,这对你真的很有帮助。)
  • 使用mysql
    SELECT。。。从…起其中字段“%keyword%”
    模糊搜索(记住首先创建索引),并应用上述
    术语权重
    字符串相似性
    算法对查询结果进行排序

为您提供一些在项目中开发搜索功能的提示:

  • 使用,只需使用API或下载源代码并使用自定义评分算法
  • 在您自己的应用程序中开发
    术语权重
    字符串相似性
    算法,这将提高您的搜索精度。(你必须搜索这两个概念,或者看看这本书,这对你真的很有帮助。)
  • 使用mysql
    SELECT。。。从…起其中字段“%keyword%”
    模糊搜索(记住首先创建索引),并应用上述
    术语权重
    字符串相似性
    算法对查询结果进行排序

你有没有研究过字符串javadoc?我看到(
String.contains()
)[非常漂亮handy@sanbhat:String.contains()不会给出我要查找的结果的排名。非常感谢@EnginePai.Lucene似乎适合我的需要。你浏览过String javadoc吗?我看到(
String.contains()
)[很不错handy@sanbhat:String.contains()不会给我我想要的结果的排名。非常感谢@EnginePai。Lucene似乎适合我的需要。