# H2 Datenbank mit VolltextSuche



## h2isToll (1. Okt 2012)

Hallöchen,

Die reine Volltextsuche für die H2 zu implementieren hab ich geschafft und 
kann ein passendes Select auch ganz einfach ausüfhren.

Beispiel:

```
SELECT * FROM FT_SEARCH_DATA('Inhalt', 0, 0) FT, ARTICLES T WHERE FT.TABLE='ARTICLES' AND T.ID=FT.KEYS[0];
```

Jetzt möchte ich allerdings noch ein JOIN machen, habe aber keine Ahnung 
wie das im Zusammenhang mit der Volltextsuche funktionieren soll, denn 
das hier funktioniert nicht:


```
SELECT * FROM FT_SEARCH_DATA('Inhalt', 0, 0) FT, ARTICLES T WHERE FT.TABLE='ARTICLES' AND T.ID=FT.KEYS[0]
JOIN ARCSLOCS B ON B.ARC_ID = T.ID;
```

Neben-Infos:

ARTICLES hat einen Primary-Key ID und
ARCSLOCS einen Foreign-Key ARC_ID der auf ID von Articles zeigt.

Ich weiß das das jetzt nicht direkt Java-Spezifisch ist, hoffe allerdings dennoch
den ein oder anderen anzutreffen, der die H2 Datenbank nutzt und sich mit 
SQL Statements auskennt.

Grüße


----------



## h2isToll (1. Okt 2012)

Okay das hat sich erledigt, man muss nur die Syntax richtig einhalten 


```
SELECT * FROM FT_SEARCH_DATA('ist', 0, 0) FT, ARTICLES T
JOIN ARCSLOCS B ON B.ARC_ID = T.ID
WHERE FT.TABLE='ARTICLES' AND T.ID=FT.KEYS[0]
```

So funktioniert das jetzt.
Allerdings komme ich dann gleich zum nächsten Punkt, wie kann ich 
das nun mit mehreren Abfragen verbinden?
Es kann ja sein das ich nicht nur nach dem Wort 'ist' suche sondern
nach mehreren Wörtern. Ein Statement aller:


```
SELECT * FROM FT_SEARCH_DATA('ist', 0, 0) FT, ARTICLES T
JOIN ARCSLOCS B ON B.ARC_ID = T.ID
WHERE FT.TABLE='ARTICLES' AND T.ID=FT.KEYS[0] 

UNION 

SELECT * FROM FT_SEARCH_DATA('Inhalt', 0, 0) FT, ARTICLES T
WHERE FT.TABLE='ARTICLES' AND T.ID=FT.KEYS[0]
```

Gibt mir folgenden Fehler:

Anzahl der Felder stimmt nicht überein
Column count does not match; SQL statement


----------



## bone2 (2. Okt 2012)

warum suchst du nicht mit LIKE?


```
SELECT * FROM FT_TABLE FT, ARTICLES T
JOIN ARCSLOCS B ON B.ARC_ID = T.ID
WHERE FT.TABLE='ARTICLES' AND T.ID=FT.KEYS[0]  AND FT.Suchspalte like '%ist%'
```


bzw besser, wenn h2 das untersützt
MySQL :: MySQL 5.1 Referenzhandbuch :: 12.7 MySQL-Volltextsuche


```
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('ist')
OR MATCH (title,body) AGAINST ('Inhalt');
```


----------

