<http://lucene.472066.n3.nabble.com/file/n4292972/Screenshot-19.png> 

Hi Alex,

It worked out kindly. I have to specify table column names. Using customer
transformer allowed me to change column name to ????_stem. In this way, it
simplifies field ranking in solrconfig.xml file and simplifies field
specification in  managed-schema file. I listed the steps below. 


Steps:
-------------------------------------------------------
1. sample of db-data-config.xml file

<dataConfig>

<dataSource name ="data_source_?????"
            type="JdbcDataSource"
            driver="com.mysql.jdbc.Driver"
           
url="jdbc:mysql://machineName:3306/databaseName?zeroDateTimeBehavior=convertToNull"
            user="?????"
            password="?????" /> 

<document name="db-fulltext-index">

<entity name="pdb_entry" pk="pdb_id"
transformer="my.solr.transformer.FieldTransformer"
               query="select pdb_id,author_list, method, header,
deposit_site, process_site,  initial_deposition_date, date_of_RCSB_release
from pdb_entry where status_code = 'REL' "
               deltaImputQuery="select pdb_id, author_list , method, header ,
deposit_site, process_site,  initial_deposition_date, date_of_RCSB_release
from pdb_entry a, database_PDB_rev b  where b.Structure_ID = a.pdb_id and
a.status_code = 'REL' and b.date &gt; '${dih.last_index_time}' "
               parentDeltaImputQuery="select pdb_id from pdb_entry where
pdb_id=${database_PDB_rev.Structure_ID}" 
               deltaQuery="select pdb_id, author_list, method, header,
deposit_site, process_site,  initial_deposition_date, date_of_RCSB_release
from pdb_entry a, database_PDB_rev b  where b.Structure_ID = a.pdb_id and
a.status_code = 'REL' and b.date &gt; '${dih.last_index_time}' "
               parentDeltaQuery="select pdb_id from pdb_entry where
pdb_id=${database_PDB_rev.Structure_ID}" >
           
  <entity  name="citation"  onError="continue" 
transformer="my.solr.transformer.FieldTransformer"
                query="select title  from citation where
Structure_ID='${pdb_entry.pdb_id}' and id = 'primary' and title is not null" 
                parentDeltaQuery="select pdb_id from pdb_entry where
pdb_id=${citation.Structure_ID}" >
                         
  </entity>

  <entity  name="citation_author" onError="continue" 
transformer="my.solr.transformer.FieldTransformer"
                query="select name  from citation_author where
Structure_ID='${pdb_entry.pdb_id}' and citation_id = 'primary' " 
                parentDeltaQuery="select pdb_id from pdb_entry where
pdb_id=${citation_author.Structure_ID}" >        
  </entity>
</entity> 
  </document>
</dataConfig>

2. Modification of solrconfig.xml file: 
Add the following lines:


 <lib dir="${solr.install.dir:../../../..}/dist/" 
regex="solr-dataimporthandler-\d.*\.jar" />
 <lib dir="${solr.install.dir:../../../..}/dist/"
regex="mysql-connector-java-5.0.7-bin.jar" />


 <lib dir="${solr.install.dir:../../../..}/dist/"
regex="solr-rcsb-plugin.jar" />


<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>


 <requestHandler name="/search" class="solr.SearchHandler">
  <lst name="defaults">
      <str name="indent">true</str>      
          <str name="echoParams">explicit</str>
              <str name="defType">edismax</str>
               <str name="qf">pdb_id^20.0</str>
               <str name="qf">author_list_stem^20.0</str>
                <str name="qf">header^10.0</str>
                <str name="qf">reflns.resolution^5.0</str>
                <str name="qf">keywords_stem^10.0</str>
                <str name="qf">rest_field_stem^0.3</str> 
                <str name="mm">7</str>
                <int name="rows">1000</int>
                <str name="df">text</str> 
  </lst>
 </requestHandler>

3. Modification of managed-schema file:


    <field name="pdb_id" type="string" indexed="true" stored="true"
required="true" multiValued="false" />
   

 <field name="rest_fields_stem" type="pdb_text_stem" indexed="true"
stored="true" multiValued="true"/>
 <copyField source="*_stem" dest="rest_fields_stem"/>


<dynamicField name="*_stem"  type="pdb_text_stem"    indexed="true" 
stored="true"/>

 
<fieldtype name="pdb_text_stem" class="solr.TextField"
positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true" />
      <filter class="solr.StopFilterFactory" ignoreCase="true"/>
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" catenateWords="0" catenateNumbers="0"
catenateAll="0"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true"/>
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" catenateWords="0" catenateNumbers="0"
catenateAll="0"/>
      
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true" />
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
 </fieldtype>


4. Java class of FieldTransformer:
package my.solr.transformer;

import java.util.List;
import java.util.Map;

import org.apache.solr.handler.dataimport.Context;
import org.apache.solr.handler.dataimport.DataImporter;
import org.apache.solr.handler.dataimport.Transformer;

public class FieldTransformer extends Transformer  {
    public Map<String, Object> transformRow(Map<String, Object> row, Context
context) {
        List<Map&lt;String, String>> fields = ((Context)
context).getAllEntityFields();
        
        for (Map<String, String> field : fields) {
            String columnName = field.get(DataImporter.COLUMN);
            // Get this field's value from the current row
            Object value = row.get(columnName);
            if (value != null && !value.toString().trim().equals("")) {
               row.put(columnName + "_stem", value.toString().trim());
            }
        }
        return row;
    }
    
    
}

5. NOTES:

1. When write customer transformer, need to copy the following files:

cp /opt/solr-6.1.0/dist/solr-dataimporthandler-extras-6.1.0.jar

 /opt/solr-6.1.0/server/solr-webapp/webapp/WEB-INF/lib/

cp /opt/solr-6.1.0/dist/solr-dataimporthandler-6.1.0.jar

 /opt/solr-6.1.0/server/solr-webapp/webapp/WEB-INF/lib/

2. put the customer transformer jar file to the following directory and
specify it solrconfig.xml file (see step 2 above) 

/opt/solr-6.1.0/dist/solr-rcsb-plugin.jar 





--
View this message in context: 
http://lucene.472066.n3.nabble.com/help-with-DIH-transformer-to-add-a-suffix-to-column-names-tp4292448p4292972.html
Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to