通过 cloudant-client 访问搜索索引 api
Access search index by cloudant-client api
我在 cloudant 服务器中有一个文档为:
{
"_id": "web",
"_rev": "11-b1d0e315272a87c2549df4004d836049",
"min_weight": 40,
"max_weight": 65,
"min_length": 1,
"max_length": 2.2,
"attributeCollection": {
"attributeArray": [
{
"updateable": false,
"lookup": "issuetype",
"issueAttributeDefinitionId": 13,
"attributeType": 1,
"name": "web issue",
"value": [
"Improper Neutralization of Input During Web Page Generation"
]
}
]
},
}
我在文档中为 "name" 和 "value" 创建了搜索索引:
function (doc) {
if (doc.attributeCollection && doc.attributeCollection.attributeArray) {
for (var i=0; i<doc.attributeCollection.attributeArray.length; i++) {
if (doc.attributeCollection.attributeArray[i].name) {
index("name", doc.attributeCollection.attributeArray[i].name, { store : true });
}
if (doc.attributeCollection.attributeArray[i].value) {
for (var j=0; j<doc.attributeCollection.attributeArray[i].value.length; j++) {
index("value", doc.attributeCollection.attributeArray[i].value[j], { store : true });
}
}
}
}
}
并且我已在浏览器中成功执行查询 (https://xxx.cloudant.com/issuedb/_design/searchJson/_search/newSearch?limite=10&include_docs=true&q=name:"web*"
) 以获得结果。此外,我想通过 cloudant-client api 获取结果。下面是我的代码
CloudantClient client=new CloudantClient("xxx", "xxx", "xxx" );
System.out.println("Connection successful! "+client.getBaseUri());
Database db=client.database("issuedb", true);
System.out.println("Datase available - "+db.getDBUri());
List<issue> issues=db.search("searchJson/newSearch")
.limit(10).includeDocs(true)
.query("name=\"web*\"", issue.class);
for (int i = 0; i < issues.size(); i++) {
issue iss=issues.get(i);
System.out.println(iss.getId());
System.out.println(iss.getName());
System.out.println(iss.getValue());
}
但在浏览器中无法得到搜索查询的结果(数据和索引连接也检查过,没问题)。这段代码有什么错误。
使用 Lucene 查询解析器语法查询搜索索引。尝试使用冒号代替等号:
List<issue> issues=db.search("searchJson/newSearch")
.limit(10).includeDocs(true)
.query("name:\"web*\"", issue.class);
我在 cloudant 服务器中有一个文档为:
{
"_id": "web",
"_rev": "11-b1d0e315272a87c2549df4004d836049",
"min_weight": 40,
"max_weight": 65,
"min_length": 1,
"max_length": 2.2,
"attributeCollection": {
"attributeArray": [
{
"updateable": false,
"lookup": "issuetype",
"issueAttributeDefinitionId": 13,
"attributeType": 1,
"name": "web issue",
"value": [
"Improper Neutralization of Input During Web Page Generation"
]
}
]
},
}
我在文档中为 "name" 和 "value" 创建了搜索索引:
function (doc) {
if (doc.attributeCollection && doc.attributeCollection.attributeArray) {
for (var i=0; i<doc.attributeCollection.attributeArray.length; i++) {
if (doc.attributeCollection.attributeArray[i].name) {
index("name", doc.attributeCollection.attributeArray[i].name, { store : true });
}
if (doc.attributeCollection.attributeArray[i].value) {
for (var j=0; j<doc.attributeCollection.attributeArray[i].value.length; j++) {
index("value", doc.attributeCollection.attributeArray[i].value[j], { store : true });
}
}
}
}
}
并且我已在浏览器中成功执行查询 (https://xxx.cloudant.com/issuedb/_design/searchJson/_search/newSearch?limite=10&include_docs=true&q=name:"web*"
) 以获得结果。此外,我想通过 cloudant-client api 获取结果。下面是我的代码
CloudantClient client=new CloudantClient("xxx", "xxx", "xxx" );
System.out.println("Connection successful! "+client.getBaseUri());
Database db=client.database("issuedb", true);
System.out.println("Datase available - "+db.getDBUri());
List<issue> issues=db.search("searchJson/newSearch")
.limit(10).includeDocs(true)
.query("name=\"web*\"", issue.class);
for (int i = 0; i < issues.size(); i++) {
issue iss=issues.get(i);
System.out.println(iss.getId());
System.out.println(iss.getName());
System.out.println(iss.getValue());
}
但在浏览器中无法得到搜索查询的结果(数据和索引连接也检查过,没问题)。这段代码有什么错误。
使用 Lucene 查询解析器语法查询搜索索引。尝试使用冒号代替等号:
List<issue> issues=db.search("searchJson/newSearch")
.limit(10).includeDocs(true)
.query("name:\"web*\"", issue.class);