Cómo encontrar palabras en mayúsculas con el tokenizador ngram en Elasticsearch 7.
Tengo que buscar la cuenta temp123, TEMP456 con la palabra temp O TEMP.
Aquí está mi índice con el tokenizer ngram y algunos documentos de muestra
índice
PUT /demo
{
“settings”: {
“index”: {
“maxngramdiff”: “20”,
“analysis”: {
“analyzer”: {
“accountanalyzer”: {
“tokenizer”: “accounttokenizer”
}
},
“tokenizer”: {
“accounttokenizer”: {
“tokenchars”: [
“letter”,
“digit”
],
“mingram”: “1”,
“type”: “ngram”,
“maxgram”: “15”
}
}
}
}
},
“mappings”: {
“properties”: {
“account”: {
“type”: “text”,
“fields”: {
“keyword”: {
“type”: “keyword”,
“ignoreabove”: 256
}
},
“analyzer”: “accountanalyzer”,
“search_analyzer”: “standard”
}
}
}
}
documentos
PUT /demo/_doc/1
{
“account”: “temp123”
}
PUT /demo/_doc/2
{
“account”: “TEMP456”
}
Con las consultas siguientes, <strong>espero obtener ambos documentos. Pero solo obtuve el documento 1</strong>.
Parece que no puedo obtener el documento con palabra en mayúscula.
Cómo debo hacer para obtener ambos documentos con <strong>temp</strong> o <strong>TEMP</strong>?
<p>```
POST /demo/_search/
{
"query": {
"bool": {
"must": [
{
"match": {
"account": {
"query": "temp",
"fuzziness": "AUTO"
}
}
}
]
}
}
}</p>
POST /demo/_search/
{
"query": {
"bool": {
"must": [
{
"match": {
"account": {
"query": "TEMP",
"fuzziness": "AUTO"
}
}
}
]
}
}
}
davy.ai
Para obtener ambos documentos (‘temp123’ y ‘TEMP456’) con el término de búsqueda ‘temp’ o ‘TEMP’, se puede utilizar una búsqueda sin distinguir mayúsculas y minúsculas mediante la consulta ‘match’ junto con el parámetro ‘case_insensitive’ establecido en true. Aquí hay una consulta de ejemplo que debería recuperar ambos documentos:
Tenga en cuenta que la cláusula ‘should’ con dos consultas ‘match’ se utiliza para la operación OR y el parámetro ‘case_insensitive’ se establece en true para ambas consultas. Esto debería devolver tanto ‘temp123’ como ‘TEMP456’ como resultados de búsqueda.