Merci beaucoup @Random, j'ai modifié le mapping comme suit. Pour tester, j'ai utilisé "movie" comme type pour l'indexation. Note: J'ai ajouté search_analyzer aussi. Je n'obtenais pas de bons résultats sans cela. Cependant, j'ai des doutes suivants pour l'utilisation de search_analyzer.ElasticSearch: Peut-on appliquer à la fois des analyseurs de n-gram et de langage lors de l'indexation?
1] Pouvons-nous utiliser search_analyzer personnalisé dans le cas d'analyseurs de langage?
2] Est-ce que j'obtiens tous les résultats en raison de l'analyseur de n-gramme que j'ai employé et pas en raison de l'analyseur anglais?
{
"settings": {
"analysis": {
"analyzer": {
"english_ngram": {
"type": "custom",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer",
"ngram_filter"
],
"tokenizer": "whitespace"
},
"search_analyzer":{
"type": "custom",
"tokenizer": "whitespace",
"filter": "lowercase"
}
},
"filter": {
"english_stop": {
"type": "stop"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"ngram_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram": 25
}
}
}
},
"mappings": {
"movie": {
"properties": {
"title": {
"type": "string",
"fields": {
"en": {
"type": "string",
"analyzer": "english_ngram",
"search_analyzer": "search_analyzer"
}
}
}
}
}
}
}
Mise à jour:
analyseur de recherche L'utilisation ne fonctionne pas aussi consistently.and besoin d'une aide à la question this.Updating avec mes conclusions.
J'ai utilisé la cartographie suivante comme suggéré (Note: Cette cartographie n'utilise pas l'analyseur de recherche), pour la simplicité, nous ne considérons que l'analyseur anglais.
{
"settings": {
"analysis": {
"analyzer": {
"english_ngram": {
"type": "custom",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer",
"ngram_filter"
],
"tokenizer": "standard"
}
},
"filter": {
"english_stop": {
"type": "stop"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"ngram_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 25
}
}
}
}
}
Créé index:
PUT http://localhost:9200/movies/movie/1
{"title":"[email protected] movie"}
Essayé requête suivante:
GET http://localhost:9200/movies/movie/_search
{
"query": {
"multi_match": {
"query": "$peci mov",
"fields": ["title"],
"operator": "and"
}
}
}
}
J'ai obtenu aucun résultat pour cela, que je fais quelque chose de mal? Je suis en train d'obtenir des résultats pour:
1] Special characters
2] Partial matches
3] Space separated partial and full words
Merci encore!
Merci beaucoup au hasard, votre réponse est vraiment utile, mais j'ai quelques doutes pour cela, je l'ai revu à nouveau ma question, pouvez-vous s'il vous plaît aider? – SSG
Pourriez-vous s'il vous plaît fournir un exemple où votre 'search_analyzer' agit mieux que l'original? BTW, vous feriez mieux de garder la réponse originale aussi bien et juste ajouter une section "Mise à jour" avec des amendements ou même poser une question distincte, car sinon cela ajoute une certaine confusion – Random
Salut Random! excuses pour la réponse tardive, mais il semble que l'utilisation de search_analyzer ne fonctionne pas toujours, j'ai mis à jour ma question dans la section Mise à jour. Ce serait une aide précieuse si vous pouviez jeter un oeil. – SSG