Bonjour,
J'essaie d'intégrer ElasticSearch à mon projet RoR mais j'ai un problème de mapping: Lorsque j'ajoute un enregistrement, il utilise le mapping automatique alors que j'ai configuré un mapping.
J'ai essayé plusieurs tuto sur une app vierge et j'obtiens toujours le même problème.
Voici le code à partir d'une app vierge:
Post.rb:
require 'elasticsearch/model'
class Post < ApplicationRecord
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
belongs_to :category
def self.search(query)
__elasticsearch__.search(
{
query: {
multi_match: {
query: query,
fields: ['title^10', 'content']
}
}
}
)
end
settings index: { number_of_shards: 1 } do
mappings dynamic: 'false' do
indexes :title, analyzer: ''french'
indexes :content, analyzer: ''french'
indexes :category, type: 'object',
properties: {
name: {type: 'string', analyzer: 'french' }
}
end
end
end
Post.__elasticsearch__.client.indices.delete index: Post.index_name rescue nil
# Create the new index with the new mapping
Post.__elasticsearch__.client.indices.create \
index: Post.index_name,
body: { settings: Post.settings.to_hash, mappings: Post.mappings.to_hash }
# Index all article records from the DB to Elasticsearch
Post.import
Pourtant mon mapping est reconnu par elasticsearch car quand je vais sur http://localhost:9200/posts/_mapping?pretty=true , j'ai ceci qui correspond à mon mapping
{
"posts" : {
"mappings" : {
"post" : {
"dynamic" : "false",
"properties" : {
"category" : {
"properties" : {
"name" : {
"type" : "text",
"analyzer" : "french"
}
}
},
"content" : {
"type" : "text",
"analyzer" : "french"
},
"title" : {
"type" : "text",
"analyzer" : "french"
}
}
}
}
}
}
Mais quand je fais:
GET /posts/_search
{
"query": {
"match_all": {}
}
}
J'obtiens
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "posts",
"_type": "post",
"_id": "1",
"_score": 1,
"_source": {
"id": 1,
"title": "jkhjkh",
"context": "jkhjkhhg",
"category_id": 1,
"created_at": "2017-09-28T15:31:37.000Z",
"updated_at": "2017-09-28T15:31:37.000Z"
}
},
{
"_index": "posts",
"_type": "post",
"_id": "2",
"_score": 1,
"_source": {
"id": 2,
"title": "ju",
"context": "yjyj",
"category_id": 1,
"created_at": "2017-09-28T15:34:50.000Z",
"updated_at": "2017-09-28T15:34:50.000Z"
}
}
]
}
}
Le nom de la catégorie ne s'enregistre pas et je ne sais pas faire une recherche avec le nom de la catégorie. On dirais qu'il utilise le mapping automatique.