es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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”: “account
tokenizer”
}
},
“tokenizer”: {
“accounttokenizer”: {
“token
chars”: [
“letter”,
“digit”
],
“mingram”: “1”,
“type”: “ngram”,
“max
gram”: “15”
}
}
}
}
},
“mappings”: {
“properties”: {
“account”: {
“type”: “text”,
“fields”: {
“keyword”: {
“type”: “keyword”,
“ignoreabove”: 256
}
},
“analyzer”: “account
analyzer”,
“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" } } } ] } } }
Tags:  ,

Answer

  1. Avatar for 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:

    POST /demo/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "account": {
                  "query": "temp",
                  "fuzziness": "AUTO",
                  "case_insensitive": true
                }
              }
            },
            {
              "match": {
                "account": {
                  "query": "TEMP",
                  "fuzziness": "AUTO",
                  "case_insensitive": true
                }
              }
            }
          ]
        }
      }
    }
    

    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.

Comments are closed.