コード例 #1
0
 def test_update_a_search_index_with_analyzer(self):
     """
     Test that updating a search analyzer updates the contents of the correct
     search index object in the DesignDocument dictionary.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     ddoc.add_search_index('search001',
                           'not-a-valid-search-index',
                           'email')
     self.assertEqual(
         ddoc.get('indexes')['search001'],
         {'index': 'not-a-valid-search-index', 'analyzer': 'email'}
     )
     ddoc.update_search_index(
         'search001',
         'function (doc) {\n  index("default", doc._id); '
         'if (doc._id) {index("name", doc.name, {"store": true}); }\n}',
         'simple'
     )
     self.assertEqual(
         ddoc.get('indexes')['search001'],
         {'index': 'function (doc) {\n  index("default", doc._id); '
             'if (doc._id) {index("name", doc.name, '
             '{"store": true}); }\n}',
          'analyzer': 'simple'
         }
     )
コード例 #2
0
 def test_search_index_save_fails_with_existing_text_index(self):
     """
     Tests that save fails when language is query and both a search index
     and a text index exist in the design document.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     ddoc['language'] = 'query'
     ddoc['indexes']['index001'] = {
         'index': {'index_array_lengths': True,
                   'fields': [{'name': 'name', 'type': 'string'},
                              {'name': 'age', 'type': 'number'}],
                   'default_field': {'enabled': True, 'analyzer': 'german'},
                   'default_analyzer': 'keyword',
                   'selector': {}},
         'analyzer': {'name': 'perfield','default': 'keyword',
                      'fields': {'$default': 'german'}}}
     ddoc.save()
     self.assertTrue(ddoc['_rev'].startswith('1-'))
     search_index = ('function (doc) {\n  index("default", doc._id); '
                     'if (doc._id) {index("name", doc.name, '
                     '{"store": true}); }\n}')
     ddoc.add_search_index('search001', search_index)
     self.assertIsInstance(
         ddoc['indexes']['search001']['index'], str
     )
     with self.assertRaises(CloudantException) as cm:
         ddoc.save()
     err = cm.exception
     self.assertEqual(
         str(err),
         'Definition for query text index search001 must be of type dict.'
     )
コード例 #3
0
 def test_search_index_save_succeeds(self):
     """
     Tests that save succeeds when no language is specified for search
     indexes.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     search_index = ('function (doc) {\n  index("default", doc._id); '
                     'if (doc._id) {index("name", doc.name, '
                     '{"store": true}); }\n}')
     ddoc.add_search_index('search001', search_index)
     ddoc.save()
     self.assertTrue(ddoc['_rev'].startswith('1-'))
コード例 #4
0
 def test_get_search_index(self):
     """
     Test retrieval of a search index from the DesignDocument.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     index = ('function (doc) {\n  index("default", doc._id); '
              'if (doc._id) {index("name", doc.name, '
              '{"store": true}); }\n}')
     ddoc.add_search_index('search001', index)
     ddoc.add_search_index('search002', index)
     ddoc.add_search_index('search003', index)
     self.assertEqual(
         ddoc.get_index('search002'),
         {'index': 'function (doc) {\n  index("default", doc._id); '
             'if (doc._id) {index("name", doc.name, '
             '{"store": true}); }\n}'}
     )
コード例 #5
0
 def test_iterating_over_search_indexes(self):
     """
     Test iterating over search indexes within the DesignDocument.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     search_index = ('function (doc) {\n  index("default", doc._id); '
                     'if (doc._id) {index("name", doc.name, '
                     '{"store": true}); }\n}')
     ddoc.add_search_index('search001', search_index)
     ddoc.add_search_index('search002', search_index)
     ddoc.add_search_index('search003', search_index)
     search_index_names = []
     for search_index_name, search_index in ddoc.iterindexes():
         search_index_names.append(search_index_name)
     self.assertTrue(
         all(x in search_index_names for
             x in ['search001', 'search002', 'search003'])
     )
コード例 #6
0
 def test_add_a_search_index(self):
     """
     Test that adding a search index adds a search index object to
     the DesignDocument dictionary.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     self.assertEqual(ddoc.get('indexes'), {})
     ddoc.add_search_index(
         'search001',
         'function (doc) {\n  index("default", doc._id); '
         'if (doc._id) {index("name", doc.name, {"store": true}); }\n}'
     )
     self.assertListEqual(list(ddoc.get('indexes').keys()), ['search001'])
     self.assertEqual(
         ddoc.get('indexes')['search001'],
         {'index': 'function (doc) {\n  index("default", doc._id); '
             'if (doc._id) {index("name", doc.name, {"store": true}); }\n}'}
      )
コード例 #7
0
 def test_list_search_indexes(self):
     """
     Test the retrieval of search index name list from DesignDocument.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     index = 'function (doc) {\n  index("default", doc._id); '
     'if (doc._id) {index("name", doc.name, '
     '{"store": true}); }\n}'
     ddoc.add_search_index('search001', index)
     ddoc.add_search_index('search002', index)
     ddoc.add_search_index('search003', index)
     self.assertTrue(
         all(x in ddoc.list_indexes() for x in [
             'search001',
             'search002',
             'search003'
         ])
     )
コード例 #8
0
 def test_delete_a_search_index(self):
     """
     Test deleting a search index from the DesignDocument dictionary.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     ddoc.add_search_index(
         'search001',
         'function (doc) {\n  index("default", doc._id); '
         'if (doc._id) {index("name", doc.name, '
         '{"store": true}); }\n}'
     )
     self.assertEqual(
         ddoc.get('indexes')['search001'],
         {'index': 'function (doc) {\n  index("default", doc._id); '
             'if (doc._id) {index("name", doc.name, '
             '{"store": true}); }\n}'}
     )
     ddoc.delete_index('search001')
     self.assertEqual(ddoc.get('indexes'), {})
コード例 #9
0
    def test_partitioned_search(self):
        ddoc = DesignDocument(self.db, 'partitioned_search', partitioned=True)
        ddoc.add_search_index(
            'search1',
            'function(doc) { index("id", doc._id, {"store": true}); }')
        ddoc.save()

        for partition_key in self.populate_db_with_partitioned_documents(
                2, 10):
            results = self.db.get_partitioned_search_result(partition_key,
                                                            ddoc['_id'],
                                                            'search1',
                                                            query='*:*')

            i = 0
            for result in results['rows']:
                print(result)
                self.assertTrue(result['id'].startswith(partition_key + ':'))
                i += 1
            self.assertEquals(i, 10)
コード例 #10
0
 def test_fetch_search_index(self):
     """
     Ensure that the document fetch from the database returns the
     DesignDocument format as expected when retrieving a design document
     containing search indexes.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     search_index = ('function (doc) {\n  index("default", doc._id); '
                     'if (doc._id) {index("name", doc.name, '
                     '{"store": true}); }\n} ')
     ddoc.add_search_index('search001', search_index)
     ddoc.add_search_index('search002', search_index, 'simple')
     ddoc.add_search_index('search003', search_index, 'standard')
     ddoc.save()
     ddoc_remote = DesignDocument(self.db, '_design/ddoc001')
     self.assertNotEqual(ddoc_remote, ddoc)
     ddoc_remote.fetch()
     self.assertEqual(ddoc_remote, ddoc)
     self.assertTrue(ddoc_remote['_rev'].startswith('1-'))
     self.assertEqual(ddoc_remote, {
         '_id': '_design/ddoc001',
         '_rev': ddoc['_rev'],
         'indexes': {
             'search001': {'index': search_index},
             'search002': {'index': search_index, 'analyzer': 'simple'},
             'search003': {'index': search_index, 'analyzer': 'standard'}
         },
         'views': {}
     })
コード例 #11
0
def create_moviedb_indexes():

    ddoc_fn = '''
function(doc){
  index("default", doc._id);
  if (doc.name){
    index("name", doc.name, {"store": true});
  }
}
'''    
    db = cloudant_client[CL_MOVIEDB]
    index_name = 'movie-search-index'

    ddoc = DesignDocument(db, index_name)
    if ddoc.exists():
        ddoc.fetch()
        ddoc.update_search_index(index_name, ddoc_fn, analyzer=None)
        print('updated', index_name)
    else:
        ddoc.add_search_index(index_name, ddoc_fn, analyzer=None)
        print('created', index_name)
    ddoc.save()
コード例 #12
0
 def test_adding_existing_search_index(self):
     """
     Test that adding an existing search index fails as expected.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     ddoc.add_search_index(
         'search001',
         'function (doc) {\n  index("default", doc._id); '
         'if (doc._id) {index("name", doc.name, {"store": true}); }\n}',
     )
     with self.assertRaises(CloudantArgumentError) as cm:
         ddoc.add_search_index(
             'search001',
             'function (doc) {\n  index("default", doc._id); '
             'if (doc._id) {index("name", doc.name, '
             '{"store": true}); }\n}'
         )
     err = cm.exception
     self.assertEqual(
         str(err),
         'An index with name search001 already exists in this design doc'
     )
コード例 #13
0
 def test_add_a_search_index_with_analyzer(self):
     """
     Test that adding a search index with an analyzer adds a search index
     object to the DesignDocument dictionary.
     """
     ddoc = DesignDocument(self.db, '_design/ddoc001')
     self.assertEqual(ddoc.get('indexes'), {})
     ddoc.add_search_index(
         'search001',
         'function (doc) {\n  index("default", doc._id); '
         'if (doc._id) {index("name", doc.name, {"store": true}); }\n}',
         {'name': 'perfield', 'default': 'english', 'fields': {
             'spanish': 'spanish'}}
     )
     self.assertListEqual(list(ddoc.get('indexes').keys()), ['search001'])
     self.assertEqual(
         ddoc.get('indexes')['search001'],
         {'index': 'function (doc) {\n  index("default", doc._id); '
             'if (doc._id) {index("name", doc.name, {"store": true}); }\n}',
             'analyzer': {"name": "perfield", "default": "english", "fields":
                 {"spanish": "spanish"}}}
      )