Question

J'ai un problème dans lequel Solr n'effacera pas l'index lors d'une importation complète.

Tous les serveurs exécutent SOLR 3.4, la configuration est aussi vanille que possible.

J'ai essayé cela sur notre environnement de développement et sur mon propre ordinateur et reçu des résultats similaires.

Le schéma est plutôt simple, ce sont les points saillants:

<schema name="System" version="1.4">
...
  </types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
    <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0" />
    <fieldType name="documentKey" class="solr.TextField">
      <analyzer type="index"> 
        <tokenizer class="solr.KeywordTokenizerFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
        <tokenizer class="solr.KeywordTokenizerFactory"/> 
      </analyzer> 
    </fieldType>
  </types>
  <fields>
    <field name="document_id" type="documentKey" indexed="true" stored="true" required="true" />
    <field name="entity_id" type="long" indexed="true" stored="true" required="true" />
    <field name="name" type="string" indexed="true" stored="true" required="true" />
    <field name="entity_type" type="string" indexed="true" stored="true" required="false" />
    <field name="Timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
  </fields>
</schema>

de note: - Le champ Document_ID est calculé dans la vue matérialisée utilisée pour remplir l'index et est une combinaison d'autres champs non dans cet index, mais est indépendant de l'entité_id. C'est unique. - Le champ Entity_id est la clé d'un couple de tables et pour le même document_id, il peut changer sauvagement entre un rafraîchissement et un autre.

Avant un rafraîchissement complet, si je demande l'index comme tel:

http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22

Je reçois:

<?xml version="1.0" encoding="UTF-8"?>
  <response>
    <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">5</int>
      <lst name="params">
        <str name="indent">true</str>
        <str name="q">document_id:"French_Polynesia/Huahine~4034376"</str>
        <str name="rows">10</str>
      </lst>
    </lst>
  <result name="response" numFound="1" start="0">
    <doc>
      <date name="Timestamp">2012-03-08T09:47:26.335Z</date>
      <str name="document_id">French_Polynesia/Huahine~4034376</str>
      <long name="entity_id">22902728</long>
      <str name="name">Huahine</str>
      <str name="type">LOCATION</str>
    </doc>
  </result>
</response>

Puis je rafraîchit:

http://localhost:8080/qq-solr/system/dataimport?command=full-import&clean=true&commit=true&optimize=true

(Je connais le nettoyage, le commit et l'optimisation sont redondants, mais je les ai utilisés juste pour vous assurer) et après un moment, je reçois le message que tout est A-OK.

Puis je demande à nouveau l'index:

http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22

Et je reçois:

<?xml version="1.0" encoding="UTF-8"?>
  <response>
    <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">5</int>
      <lst name="params">
        <str name="indent">true</str>
        <str name="q">document_id:"French_Polynesia/Huahine~4034376"</str>
        <str name="rows">10</str>
      </lst>
    </lst>
  <result name="response" numFound="1" start="0">
    <doc>
      <date name="Timestamp">2012-03-09T08:31:07.317Z</date>
      <str name="document_id">French_Polynesia/Huahine~4034376</str>
      <long name="entity_id">22902728</long>
      <str name="name">Huahine</str>
      <str name="type">LOCATION</str>
    </doc>
  </result>
</response>

Mais dans la base de données, l'entité_id est différente!

Je vois que l'horodatage a été mis à jour, de sorte que l'enregistrement a été touché, mais pourquoi l'ancienne valeur est-elle conservée?

Était-ce utile?

La solution

Je dirigerais votre processus dataimporthandler (DIH) via le mode de développement interactif afin queVous pouvez assurer que votre requête de base de données récupère l'entité_id que vous attendez.Étant donné que l'horodatage de l'entrée SOLR est mis à jour, votre processus DIH est en cours d'exécution, mais je suppose que la cause de ces mensonges est de la manière dont les données sont récupérées.

Autres conseils

Chaque fois que je fais une opération comme celle-ci avec Solr, je précise toujours manuellement l'index d'abord en utilisant Curl pour être sûr de 100% de son essuyage.Voici un tutoriel: http://www.alphadevx.com/A / 365-Clearing-A-Solr-Sech-Index

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top