私はdbに一連のアイテムを持っています。各item
にはname and a description
._search
機能を実装する必要があります。これは、いくつかのキーワードを取得し、or
の説明にある単語に一致するキーワードの少なくとも1つを含む個別のアイテムを返します。
たとえば、私はdbに3つのアイテムを持っています
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
キーワード「writing」を使用して検索すると、マジックマーカーとXPigment Linerが返されます
キーワード「モール」を使用して検索すると、2番目のアイテムが返されます
LIKE
キーワードとIN
キーワードを別々に使用してみましたが、.. IN
キーワードを機能させるには、クエリを次のようにする必要があります
SELECT DISTINCT FROM mytable WHERE name IN ('pall mall cigarettes')
だが
SELECT DISTINCT FROM mytable WHERE name IN ('mall')
0行を返します
名前と説明の両方の列に対応し、Wordの部分一致を可能にするクエリを作成する方法を理解できませんでした。
誰か助けてもらえますか?
更新:
Hibernateを使用してテーブルを作成し、説明フィールドにjavax.persistence @Lobアノテーションを使用しました。テーブルを調べたときにpsqlを使用すると、それが表示されます
...
id | bigint | not null
description | text |
name | character varying(255) |
...
テーブルのレコードの1つは、
id | description | name
21 | 133414 | magic marker
まず第一に、このアプローチは規模が大きくなることはなく、単語からアイテムへの個別のインデックスが必要になります(逆インデックスなど)。
データが大きくない場合は、
SELECT DISTINCT(name) FROM mytable WHERE name LIKE '%mall%' OR description LIKE '%mall%'
複数のキーワードがある場合は、OR
を使用します。
これもうまくいくかもしれません。
SELECT *
FROM myTable
WHERE CHARINDEX('mall', name) > 0
OR CHARINDEX('mall', description) > 0