Доступ к поисковому индексу с помощью api облачного клиента

У меня есть документ на облачном сервере как:

 {
  "_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"
        ]
      }
    ]
  },
}

Я создал поисковый индекс для "имени" и "значения" в документах как:

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*") в браузере, чтобы получить результат. Более того, я хочу получить результаты по api cloudant-client. Ниже мой код

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());
}

Но он не может получить результат в виде поискового запроса в браузере (также проверяется соединение данных и индекса, это нормально). В чем ошибка в этом коде.


person Nguyen Chi Hieu    schedule 14.04.2016    source источник


Ответы (1)


Поисковые индексы запрашиваются с использованием синтаксиса анализатора запросов Lucene. попробуйте использовать двоеточие вместо знака равенства:

List<issue> issues=db.search("searchJson/newSearch")
.limit(10).includeDocs(true)
.query("name:\"web*\"", issue.class);

Дополнительная информация:
Cloudant Search
Синтаксис анализатора запросов Lucene

person vabarbosa    schedule 14.04.2016