Como faço para criar a pesquisa sql para procurar correspondências parciais?

Tenho um conjunto de itens em db .Cada item tem um name and a description.Eu preciso implementar uma instalação search que pega um número de palavras-chave e retorna itens distintos que têm pelo menos uma das palavras-chave que correspondem a uma palavra no nome or descrição.

por exemplo Eu tenho no db ,três itens

1.item1 : 
    name : magic marker
    description: a writing device which makes erasable marks    on whiteboard

2.item2:
    name: pall mall cigarettes
    description: cigarette named after a street in london

3.item3:
    name: XPigment Liner
    description: for writing and drawing

uma pesquisa com a palavra-chave 'writing' deverá devolver o marcador mágico e o invólucro do XPigment

uma pesquisa com a palavra-chave 'mall' deverá devolver o segundo item

tentou usar a palavra-chave LIKE e a palavra-chave IN separadamente.. Para IN palavra-chave para funcionar, a consulta tem de ser

SELECT DISTINCT FROM mytable WHERE name IN ('pall mall cigarettes')

Mas

SELECT DISTINCT FROM mytable WHERE name IN ('mall')

irá devolver 0 linhas

Eu não consegui descobrir como fazer uma consulta que acomoda tanto o nome como as colunas de descrição e permite correspondência parcial de palavras..

Alguém pode ajudar?

actualizar:

criei a tabela através do hibernado e para o campo Descrição, usei o javax.persistência @Lob anotacao.Usando psql quando examinei a tabela, é mostrado

...
 id           | bigint                      | not null
 description  | text                        |  
 name         | character varying(255)      | 
...
Um dos registos da tabela é:
id | description | name 
21 | 133414      | magic marker
Author: Damon Julian, 2011-08-24

2 answers

Em primeiro lugar, esta abordagem não vai escalar no grande, você vai precisar de um índice separado de palavras para item (como um índice invertido).

Se os seus dados não forem grandes, pode fazer

SELECT DISTINCT(name) FROM mytable WHERE name LIKE '%mall%' OR description LIKE '%mall%'

Utilizar OR se tiver várias palavras-chave.

 19
Author: stracktracer, 2011-08-24 10:56:33
Isto também pode funcionar.
SELECT * 
FROM myTable
WHERE CHARINDEX('mall', name) > 0
  OR CHARINDEX('mall', description) > 0
 4
Author: Narnian, 2011-08-24 12:52:20