2016-08-04 95 views
1

我希望能夠使用全文索引匹配整個短語,但似乎無法解決如何執行此操作。 Lucene Query Parser語法規定:Cloudant搜索:使用全文索引匹配整個短語

短語是由雙引號括起來的一組單詞,如「hello dolly」。

但是當我指定下面的選擇器時,它會返回名稱中帶有「sign」或「design」的所有記錄,但我希望它只返回帶有「sign design」的記錄。

POST https://foo.cloudant.com/remote/_find 
{"selector":{"$text":"\"SIGN DESIGN\""}} 

我的指數定義如下:

db.index({ 
    name: 'subbies_text', 
    type: 'text', 
    index: {}, 
}) 

或者,是有可能做對JSON索引字段中的字符串匹配?

回答

1

您正在使用索引API來創建索引,是否正確?

請您嘗試創建這個設計文檔嗎?

{ "_id": '_design/library', 
    "indexes": { 
    "subbies_text": { 
     "analyzer": { 
     "name":'standard' 
     }, 
     "index": "function(doc) { index('XXX', doc.YYY); }" 
    } 
    } 
} 

(但是,「XXX」和「YYY」更改爲您的字段名。

+0

是傑森,做工作按預期。現在我對CouchDB和Cloudant之間的差異非常困惑。 – simon

+0

我顯示的方式是使用Cloudant功能,即Lucene搜索功能,簡稱「Cloudant搜索」。 – JasonSmith

0

如果您知道允許多少個最大單詞,您可以使用可以製作包含map-reduce視圖的可搜索索引。我認爲這並不理想,但只是爲了後人:

你可以emit()你看到的每一個連續的單詞對。因此,例如,給定短語「快速棕色狐狸」,那麼你可以發出["the","quick"]["quick","brown"]["brown", "fox"]。我認爲這可以很好很簡單,但它確實只適用於少量的數據。指數可能會變得太大。

0

如果你想使用cloudant搜索,你應該先創建一個搜索索引就像JasonSmith說。然後你可以使用這個搜索索引做具體查詢 假如你有一個有一個的文件。「名稱:SIGNDESIN」。1.如果您想查詢整個詞組場

,您可以查詢這樣的:

curl https://<username:password>@<username>.cloudant.com/db/_design/<design_doc>/_search/<searchname>?q=name:SIGNDESIN | jq . 

2.如果你想查詢串詞,你可以查詢這樣的:

curl https://<username:password>@<username>.cloudant.com/db/_design/<design_doc>/_search/<searchname>?q=name:SI* | jq . 
+0

好的,謝謝。 FWIW很難理解對視圖,索引(文本和json)執行查詢的所有不同方式,例如調用'_find'或設計文檔本身。 – simon