2010-06-02 11 views
2

Какие методы могут получить JPQL для соответствия аналогичным строкам?Java: поиск в JPQL -similar-strings

Аналогичного я имею в виду:

  • Содержит: искомая строка найдена в строке спичек лица
  • корпусных нечувствительны
  • Малых mispellings: например, «Arow» соответствует «стрелка»

Я подозреваю, что первые два будет легко, однако, я был бы признателен за помощь с последним

Спасибо

ответ

4

Первые два действительно легко сделать используя ключевые слова LIKE и LOWER или UPPER. Последнее очень сложно сделать, поскольку для этого требуется определить, как должны быть аналогичные две строки. Нет базового ключевого слова, чтобы сделать это легко в JPQL (насколько я знаю). Вы можете использовать такой алгоритм, как Levenshtein distance, чтобы определить, есть ли небольшое неправильное обращение (расстояние 1 или 2). Это не сделано в JPQL, хотя ...

+1

может предположить, что для 3) вы должны использовать базу данных, поддерживающую эту функцию, и запускать ее как собственный запрос. это даст вам гораздо больше, чем все, что вы можете сделать в JPQL, одновременно с переносом переносимости –

+0

@seanizer: Какие базы данных поддерживают эту функцию? – bguiz

+1

postgres поддерживает его: http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html, а в большинстве других он может быть реализован с использованием функций/хранимых процедур. например в Oracle: http://richmurnane.blogspot.com/2006/02/levenshtein-distance-algorithm-oracle.html mysql: http://codejanitor.com/wp/2007/02/10/levenshtein-distance-as- a-mysql-stored-function/mssql: http://www.bigresource.com/MS_SQL-Levenshtein-Edit-Distance-Algorithm-zRMNNbbv.html –

 Смежные вопросы

  • Нет связанных вопросов^_^