2016-03-29 26 views
0

DB'mden sorgu verilerine izin vermek için Solr'ı yapılandırmaya çalışıyorum. Yapılandırdıktan sonra, başka bir tabloya yabancı bir anahtar olan yeni bir alan ekledim.Yabancı anahtardaki NULL değeri ile Solr Apache yapılandırması INNER JOIN

Eski kayıtlarda bu alan NULL var.

Şema DB

Tablo: id, type_material (yabancı anahtar), (diğerleri alanları göstermek gerekmez)


Tablo:

alanlar sunmaktadır malzemeler

Alanlar: kimlik, ad

Solr yapılandırma

Dosya db-veri-config.xml :

<dataConfig> 
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://path" user="user" password="pwd" /> 
    <document name="offers"> 
       <entity name="offers" 
       query="SELECT o.* FROM offers o inner join offer_group g on o.offer_group_id = g.id where g.status = 0" 
       deltaQuery="select id from offers where updated_at > '${dataimporter.last_index_time}'"> 

      <field column="id" name="id" /> 
      <field column="product_code" name="product_code" /> 
      <field column="gender" name="gender" /> 
      <field column="colors" name="colors" /> 
      <field column="year" name="year" /> 
      <field column="tags" name="tags" /> 
      <field column="size" name="size" /> 
      <field column="size_typology" name="size_typology" /> 
      <field column="season" name="season" /> 
      <field column="quantity" name="quantity" /> 
      <field column="price" name="price" /> 
      <field column="typology" name="typology" /> 
      <field column="model" name="model" /> 

      <entity name="brands" 
        query="select name from brands where id='${offers.brand_id}'" 
        deltaQuery="select id from brands where updated_at > '${dataimporter.last_index_time}'" > 
       <field name="brand_name" column="name" /> 
      </entity> 

      <entity name="materials" 
        query="select name from materials where id='${offers.type_material}' OR '${offers.type_material}' = NULL"> 
       <field name="material_name" column="name" /> 
      </entity> 

      <entity name="offer_group" 
        query="select shop_id from offer_group where id='${offers.offer_group_id}'" 
        deltaQuery="select id from offer_group where updated_at > '${dataimporter.last_index_time}'" > 
       <field name="shop_id" column="shop_id" /> 
      </entity> 

     </entity> 
    </document> 
</dataConfig> 

Dosya schema.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<schema name="offers" version="1.5"> 
    <fieldType name="string" class="solr.StrField"></fieldType> 
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/> 
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/> 

    <!-- Just like text_general except it reverses the characters of 
    each token, to enable more efficient leading wildcard queries. --> 
    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.StandardFilterFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory" /> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" 
        maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33" minTrailing="3" /> 
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="15" /> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory" /> 
      <filter class="solr.StandardFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="random" class="solr.RandomSortField" indexed="true" /> 

    <dynamicField name="random_*" type="random" indexed="true" stored="false"/> 
    <!-- End randomize offers--> 

    <field name="_version_" type="long" indexed="true" stored="true" required="false"/> 
    <field name="id" type="long" indexed="true" stored="true" required="true" /> 
    <field name="brand_id" type="long" indexed="true" stored="true" required="true" /> 
    <field name="shop_id" type="long" indexed="true" stored="true" required="true" /> 
    <field name="brand_name" type="text_general" indexed="true" stored="true" required="true" /> 

    <field name="type_material" type="long" indexed="true" stored="true" default="NULL" /> 
    <field name="material_name" type="text_general" indexed="true" stored="true" default="NULL" /> 

    <field name="offer_group_id" type="long" indexed="true" stored="true" required="true" /> 
    <field name="product_code" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="gender" type="string" indexed="true" stored="true" default="NULL" /> 
    <field name="colors" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="year" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="tags" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="size" type="string" indexed="true" stored="true" default="NULL" /> 
    <field name="size_typology" type="string" indexed="true" stored="true" default="NULL" /> 
    <field name="season" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="quantity" type="string" indexed="true" stored="true" default="NULL" /> 
    <field name="price" type="float" indexed="true" stored="true" default="NULL" /> 
    <field name="typology" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="photo_url" type="string" indexed="true" stored="true" required="true" /> 
    <field name="model" type="text_general" indexed="true" stored="true" default="NULL" /> 
    <field name="created_at" type="date" indexed="true" stored="true"/> 
    <field name="updated_at" type="date" indexed="true" stored="true"/> 

    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 

    <uniqueKey>id</uniqueKey> 

    <copyField source="colors" dest="text"/> 
    <copyField source="year" dest="text"/> 
    <copyField source="season" dest="text"/> 
    <copyField source="typology" dest="text"/> 
    <copyField source="model" dest="text"/> 
    <copyField source="tags" dest="text"/> 
    <copyField source="product_code" dest="text"/> 
    <copyField source="brand_name" dest="text"/> 
    <copyField source="material_name" dest="text" /> 
    <copyField source="gender" dest="text"/> 
</schema> 

arama sorgu başlangıç, tüm dönmek öyle sunuyor type_material'in alanı NULL'a eşit değil.

Ayrıca bunları tekrar denemek istiyorum.

+0

kullanın. Type_material == NULL 'ifadesinin yer aldığı tüm dokümanları bulmak için bir arama sorgusu mu yoksa uygun değerlere sahip olmak için null olan tüm eski değerleri dizine eklemek mi istiyorsunuz? –

+0

Evet, 'doc_material == NULL' türünde tüm materyalleri bulmak için bir arama sorgusu istiyorum ya da materyal tablosuna yabancı anahtar noktasını getirin. – ptesser

cevap

0

Sadece Sorunuzun anladığını sanmıyorum bir filtre sorgu &fq=type_material:NULL

+0

Henüz bu çözümü denemedim. Ne zaman deneyeceğim, size bildireceğim. – ptesser

+0

Ancak bu seçeneği sorgu sırasında değil, yapılandırma dosyasında yapılandırmak istiyorum. Mümkün mü? – ptesser