2015-03-19 2 views
0

Pour indexer des données, nous devons créer un document dont un champ contient la valeur d'autres champs. Nous obtenons des données de plusieurs tables.Copier des valeurs d'un champ à un autre pendant l'indexation

Tableau A
id
Nom
create_date
UPDATE_DATE
Bid

Tableau B
Bid
bname
titre
la source
release_date

Tableau C
cid
Bid
FNAME
lname ...

Selon l'exigence du titre déposé doit avoir une valeur d'autres déposés

Ex: - "title": [title, create_date, update_date, source]

s'il vous plaît nous suggérer qu'il est possible en recherche élastique ou non. Si possible comment nous allons y parvenir que nous utilisons plugin rivière pour indexer les données

PUT /_river/person/_meta 
{ 
"type": "jdbc", 
"jdbc": { 
    "url": "jdbc:postgresql://localhost:5432/test", 
    "user": "postgres", 
    "password": "postgres", 
    "sql":" query to get data" 
    "index": "test_search", 
    "type": "person" 
}, 
"bulk_size" : 10000, 
"flush_interval" : "2m" 
    } 

Merci

Répondre

0

Vous pouvez copier des champs dans le champ title en utilisant la fonction copy_to dans votre cartographie ElasticSearch:

Ajouter un paramètre copy_to à un mappage de champ entraînera la copie de toutes les valeurs de ce champ dans les champs spécifiés dans le paramètre. Dans l'exemple suivant, toutes les valeurs des champs title et abstract seront copiées dans le champ meta_data.

http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-core-types.html#copy-to

d'abord créer un index avec un mappping en ElasticSearch. Ce mappage copie les champs updatedDate, createdDate et source dans le champ title lorsqu'un document person est indexé.

POST /demo 
{ 
    "mappings": { 
     "person": { 
      "properties": { 
       "title": { 
        "type": "string" 
       }, 
       "createdDate": { 
        "type": "string", 
        "copy_to": "title" 
       }, 
       "updatedDate": { 
        "type": "string", 
        "copy_to": "title" 
       }, 
       "source": { 
        "type": "string", 
        "copy_to": "title" 
       } 
      } 
     } 
    } 
} 

Indexer un document (votre rivière sera des documents d'index, mais pour tester cette approche, vous pouvez indexer un document manuellement):

POST /demo/person/1 
{ 
    "title": "test title", 
    "updatedDate": "2011-09-30", 
    "createdDate": "2011-09-30", 
    "source": "person source" 
} 

Si vous effectuez une recherche sur le terrain title pour une valeur dans la source champ, il y aura une correspondance.

POST /demo/person/_search 
{ 
    "query": { 
     "match": { 
      "title": "person" 
     } 
    } 
} 
+0

Je n'ai pas beaucoup de connaissances sur la recherche élastique, donc où ajouter le paramètre copy_to dans la requête basée sur la rivière. aidez-moi s'il vous plaît – Rajesh

+0

Il est utile, merci – Rajesh