Browse Source

HUE-5304 [indexer] Integrate indexer with latest Solr API

Romain Rigaux 8 years ago
parent
commit
9d6a5b3

+ 11 - 6
desktop/libs/indexer/src/indexer/api3.py

@@ -33,11 +33,12 @@ from indexer.controller import CollectionManagerController
 from indexer.file_format import HiveFormat
 from indexer.fields import Field
 from indexer.smart_indexer import Indexer
-from libsolr.api import SolrApi
+from indexer.solr_client import SolrClient, SolrClientException
 
 
 LOG = logging.getLogger(__name__)
 
+
 try:
   from beeswax.server import dbms
 except ImportError, e:
@@ -399,11 +400,15 @@ def _index(request, file_format, collection_name, query=None):
   if is_unique_generated:
     schema_fields += [{"name": unique_field, "type": "string"}]
 
-  api = SolrApi(user=request.user)
-   
-  collection_manager = CollectionManagerController(request.user)
-  if not collection_manager.collection_exists(collection_name):
-    collection_manager.create_collection(collection_name, schema_fields, unique_key_field=unique_field)
+  client = SolrClient(user=request.user) 
+  try:
+    client.get_index_schema(collection_name)
+  except SolrClientException:
+    client.create_index(
+      name=collection_name,
+      fields=request.POST.get('fields', schema_fields),
+      unique_key_field=unique_field
+    )
 
   if file_format['inputFormat'] == 'table':
     db = dbms.get(request.user)

+ 3 - 1
desktop/libs/indexer/src/indexer/solr_api.py

@@ -84,12 +84,14 @@ def create_index(request):
 
   name = request.POST.get('name')
   fields = json.loads(request.POST.get('fields', '[]'))
+  unique_key_field = request.POST.get('name')
+  df = request.POST.get('name')
 
   client = SolrClient(request.user)
 
   collection = client.create_index(
       name=name,
-      fields=request.POST.get('fields', _get_fields(name='id', type='string')),
+      fields=request.POST.get('fields', fields, unique_key_field=unique_key_field, df=df),
   )
 
   response['status'] = 0

+ 1 - 4
desktop/libs/indexer/src/indexer/solr_client.py

@@ -113,14 +113,11 @@ class SolrClient(object):
     return indexes
 
 
-  def create_index(self, name, fields, config_name=None):
+  def create_index(self, name, fields, config_name=None, unique_key_field=None, df=None):
     """
     Create solr collection or core and instance dir.
     Create schema.xml file so that we can set UniqueKey field.
     """
-    unique_key_field = 'id'
-    df = 'text'
-
     if self.is_solr_cloud_mode():
       if config_name is None:
         self._create_cloud_config(name, fields, unique_key_field, df) # Create config set

+ 2 - 2
desktop/libs/libsolr/src/libsolr/api.py

@@ -392,12 +392,12 @@ class SolrApi(object):
   def add_fields(self, name, fields):
     try:
       params = self._get_params() + (        
-        ('wt', 'json')
+        ('wt', 'json'),
       )
 
       data = {'add-field': fields}
 
-      response = self._root.post('%(collection)s/schema' % name, params=params, data=json.dumps(data), contenttype='application/json')
+      response = self._root.post('%(collection)s/schema' % {'collection': name}, params=params, data=json.dumps(data), contenttype='application/json')
       return self._get_json(response)
     except RestException, e:
       raise PopupException(e, title=_('Error while accessing Solr'))