/ / String сравнение в Java, кой алгоритъм трябва да използвам? - java, mysql, алгоритъм, низ-сравнение, knuth-morris-pratt

Сравнение на низове в Java, кой алгоритъм трябва да използвам? - java, mysql, алгоритъм, string-comparison, knuth-morris-pratt

Имам изискването да сравня продуктаиме, което потребителят ще търси с наличните продукти. Имам името на продуктите, съхранени в MySQL db. Събирам всички имена и ги връщам на ниво приложение (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? И още нещо, с което всички имена на продукти на ниво приложения (java) от MySQL е правилният начин да го направите? или мога да го направя и на ниво MySQL? (PS: Не искам да използвам подобна заявка на MySQL страна, тъй като ще е много бавно)

Отговори:

1 за отговор № 1

Ще ви дам няколко съвета за разработване на функция за търсене в проекта ви:

  • употреба Lucene, просто използвайте API или изтеглете изходния код и използвайте алгоритъма за персонализиран резултат.
  • Разработване term weighting или string similarity алгоритъм в собственото ви приложение, той ще подобри точността на търсенето. (Трябва да потърсите за двете концепции или да погледнете книгата Извличане на информация, това наистина ви помага много.)
  • Използвайте mysql SELECT ... FROM ... WHERE field LIKE "%keyword%" fuzzy search (не забравяйте първо да създадете индекса) и приложете горното term weighting или string similarity алгоритъм за класиране на резултата от заявката.

0 за отговор № 2

Реших едно и също нещо аз използвах трие (Trie) и съхранява цялата комбинация от низове, които имах в трие след това можете да търсите потребителски вход в trie

Забележка: съхраняването на цялата комбинация не е добър подход. но запазването на всички комбинации в трие ще помогне в търсенето по начина, по който искате, в противен случай ще бъде префикс търсене.


0 за отговор № 3

Не е правилен начин, поставете заявка за търсенето си

например:

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

винаги получавайте само записи, които са необходими вместо всички записи.


0 за отговор № 4

Думите в потребителския вход са разделени от интервалите, така че ги разделете на srtrings, и след това използвайте string.contains (), най-дългият низ, който да се съпостави първо, който ще ви даде класиране.