فهرست منبع

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

Romain Rigaux 8 سال پیش
والد
کامیت
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.file_format import HiveFormat
 from indexer.fields import Field
 from indexer.fields import Field
 from indexer.smart_indexer import Indexer
 from indexer.smart_indexer import Indexer
-from libsolr.api import SolrApi
+from indexer.solr_client import SolrClient, SolrClientException
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
 
 
+
 try:
 try:
   from beeswax.server import dbms
   from beeswax.server import dbms
 except ImportError, e:
 except ImportError, e:
@@ -399,11 +400,15 @@ def _index(request, file_format, collection_name, query=None):
   if is_unique_generated:
   if is_unique_generated:
     schema_fields += [{"name": unique_field, "type": "string"}]
     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':
   if file_format['inputFormat'] == 'table':
     db = dbms.get(request.user)
     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')
   name = request.POST.get('name')
   fields = json.loads(request.POST.get('fields', '[]'))
   fields = json.loads(request.POST.get('fields', '[]'))
+  unique_key_field = request.POST.get('name')
+  df = request.POST.get('name')
 
 
   client = SolrClient(request.user)
   client = SolrClient(request.user)
 
 
   collection = client.create_index(
   collection = client.create_index(
       name=name,
       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
   response['status'] = 0

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

@@ -113,14 +113,11 @@ class SolrClient(object):
     return indexes
     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 solr collection or core and instance dir.
     Create schema.xml file so that we can set UniqueKey field.
     Create schema.xml file so that we can set UniqueKey field.
     """
     """
-    unique_key_field = 'id'
-    df = 'text'
-
     if self.is_solr_cloud_mode():
     if self.is_solr_cloud_mode():
       if config_name is None:
       if config_name is None:
         self._create_cloud_config(name, fields, unique_key_field, df) # Create config set
         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):
   def add_fields(self, name, fields):
     try:
     try:
       params = self._get_params() + (        
       params = self._get_params() + (        
-        ('wt', 'json')
+        ('wt', 'json'),
       )
       )
 
 
       data = {'add-field': fields}
       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)
       return self._get_json(response)
     except RestException, e:
     except RestException, e:
       raise PopupException(e, title=_('Error while accessing Solr'))
       raise PopupException(e, title=_('Error while accessing Solr'))