2016-05-16 209 views
0

我正在構建一個簡單的地址數據庫。有一個名爲Address的課程,其中地址被分解爲字段(街道,城市,州,郵政編碼)。每個字段都是字符串類型。OrientDB全文索引使用Lucene在多個字段上搜索

我希望能夠通過它們中的任何單詞來搜索地址。例如:找到搜索到的單詞是否在街道名稱或城市名稱等中的地址。 換句話說,我希望用戶能夠輕鬆搜索,而不必指定他們感興趣的地址的哪個部分。

因此,我創建像下面的命令索引:

create index Address.full on Address(street,city,state,ZIP) fulltext engine lucene

但是,當我執行以下查詢我沒有得到任何結果或錯誤消息:

select * from Address where Address.full lucene "4*" =>沒有結果,應該是2個記錄,其中郵政編碼是46250和46256

select * from Address where ZIP lucene "4*" =>獲取錯誤消息:「無法評估沒有索引配置的lucene條件。

select * from index:Address.full where key lucene "4*" =>無結果

另外: select count(*) from index:Address.full =>返回0作爲計,這意味着由於某種原因Lucene的不創建索引。創建索引時沒有錯誤消息。


我該如何做到這一點?

有沒有辦法調試查詢,爲什麼沒有結果?

回答

1

試圖聲明不同的指數指的是單場,然後在查詢執行這應該工作:

select * from Address where ZIP lucene "4*" and street lucene "a*" 

enter image description here

+0

謝謝你,但它不是我要找的。我的請求可能不太清楚。讓我澄清一下: 我希望能夠通過查詢找到記錄,無論搜索到的單詞是在街道,城市,郵政編碼還是州字段。 換句話說,我希望用戶能夠輕鬆搜索,而無需指定他們感興趣的地址的哪一部分。 –

0

索引將按預期在給定的形式於提供有沒有任何限制!


經過非常徹底的調查,我發現了潛在的錯誤!

我的一些領域有限制。例如,ZIP的MAX = 10約束。 Lucene(或OrientDB索引的某些部分)有一個錯誤,導致它在默認情況下失敗,並在字符串字段有MAX約束時創建一個空索引。

我就這個問題提交一個bug報告,並希望這將很快得到固定: https://github.com/orientechnologies/orientdb/issues/6149