2014-10-29 3 views
1

Функция полного поиска индекса текста не работает в cloudant.Полный текстовый индекс не работает в cloudant

Документ 1:

{ 
    "_id": "527c8d9327c6f27f17df0d2e17000530", 
    "_rev": "9-4a61c6dac8d03a7d55696c3dde6a4f50", 
    "employee_ID": "SCI130202", 
    "proj_role": "Team Member", 
    "work_total_experience": "4", 
} 

Документ 2:

{ 

    "_id": "527c8d9327c6f27f17df0d2e17000531", 
    "_rev": "9-4a61c6dac8d03a7d55696c3dd46a4f50", 
    "employee_ID": "SCI130201", 
    "proj_role": "developer", 
    "work_total_experience": "2", 
} 

функция Index:

{ 
"_id": "_design/search_emp", 
"_rev": "3-4562324d684a2f13d2a1f6f570736e7e", 
"views": {}, 
"language": "javascript", 
"indexes": { 
    "by_employee": { 
     "analyzer": "standard", 
     "index": "function(doc){index(doc.proj_role,{'field':'project_role'})index(doc.work_total_experience,{'field':'work_experience'})}" 
    }}} 

Если я передаю в URL, как: https://{username}.cloudant.com/databasename/_design/search_emp/_search/by_employee?q=project_role:developer & work_experience:2

Этом работает только с одним условием, но мне нужно получить точный разработчик вывода с информацией о двухлетнем опыте.

+0

Можете ли вы опубликовать пример документа, который у вас есть в вашей базе данных, которую вы пытаетесь искать? –

+0

Вышеупомянутые два примера json documents. Но мой ожидаемый результат - разработчик с 2-летним опытом. –

ответ

0

Это работало для меня ...

Вот мой дизайн документ:

{ 
    "doc": { 
     "_id": "_design/search_emp", 
     "_rev": "17-e7f119c21ca21cc6ac44c5a967cd5550", 
     "indexes": { 
      "by_employee": { 
       "analyzer": "standard", 
       "index": "function(doc) {\n index('project_role', doc.proj_role, {});\n index('work_experience', doc.work_total_experience, {});\n}" 
      } 
     }, 
     "language": "javascript", 
     "views": {} 
    }, 
    "id": "_design/search_emp", 
    "key": "_design/search_emp", 
    "value": { 
     "rev": "17-e7f119c21ca21cc6ac44c5a967cd5550" 
    } 
} 

URL-адрес:

https://username.cloudant.com/databasename/_design/search_emp/_search/by_employee?include_docs=true&q=work_experience:%222%22%20AND%20project_role:developer 

ПРИМЕЧАНИЕ: Я должен был иметь двойные кавычки ценность опыта. work_experience:"2" работал для меня, но work_experience:2 не работал.

Ответ:

{ 
    "bookmark": "g2wAAAABaANkABxkYmNvcmVAZGIyLm1lYWQuY2xvdWRhbnQubmV0bAAAAAJiQAAAAGJ_____amgCRj_bxezgAAAAYQBq", 
    "rows": [ 
     { 
      "doc": { 
       "_id": "90958a20a020a7483d3311a156fcf571", 
       "_rev": "1-795df1c239d3d029eaa6d8c45ef70a8c", 
       "employee_ID": "SCI130201", 
       "proj_role": "developer", 
       "work_total_experience": "2" 
      }, 
      "fields": {}, 
      "id": "90958a20a020a7483d3311a156fcf571", 
      "order": [ 
       0.4339554011821747, 
       0 
      ] 
     } 
    ], 
    "total_rows": 1 
} 
1

Итак, здесь есть две проблемы: одна, как вы определяете индекс, и тот, который вы запрашиваете.

  1. вы звоните index(doc.proj_role,{'field':'project_role'});, но я не уверен, что это правильный синтаксис; Я считаю, что вы хотите: index("project_role", doc.proj_role);

  2. & между этими двумя условиями должны быть AND: q=project_role:developer AND work_experience:2

Надежда, что помогает.

+0

Я попробовал метод выше. Получив результат, я не смог получить точный результат. И условие не работает –

+1

'AND' действительно работает. Просто попробовал интерактивный образец: https://cloudant.com/for-developers/search/, где я могу искать, например. 'класс: птица И диета: плотоядное животное – Daniel

Смежные вопросы