Simplemente intento comprobar cuántos documentos tienen el mismo valor link. Algo extraño está sucediendo.


Digamos que uno o más documentos tienen este valor link: https://twitter.com/someUser/status/1288024417990144000

Lo busco usando esta consulta JSON:

/theIndex/_doc/_search

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "link": "https://twitter.com/someUser/status/1288024417990144000"
                    }
                }
            ]
        }
    }
}

Devuelve los documentos 522 de 546, siendo el primer documento el correcto. Actúa más como un query_string que un must match

Si busco otro campo más exclusivo como sha256sum:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "sha256sum": "dad06b7a0a68a0eb879eaea6e4024ac7f97e38e6ac2b191afa7c363948270303"
                    }
                }
            ]
        }
    }
}

Devuelve 1 documento como debería.

También intenté buscar must term, pero devolvió 0 documentos.


Cartografía

{
  "images": {
    "aliases": {},
    "mappings": {
      "properties": {
        "sha256sum": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "link": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
      }
    },
    "settings": {
      "index": {
        "number_of_shards": "1",
        "provided_name": "images",
        "creation_date": "1593711063075",
        "analysis": {
          "filter": {
            "synonym": {
              "ignore_case": "true",
              "type": "synonym",
              "synonyms_path": "synonyms.txt"
            }
          },
          "analyzer": {
            "synonym": {
              "filter": [
                "synonym"
              ],
              "tokenizer": "keyword"
            }
          }
        },
        "number_of_replicas": "1",
        "uuid": "a5zMwAYCQuW6U4R8POiaDw",
        "version": {
          "created": "7050199"
        }
      }
    }
  }
}

No creo que un problema tan simple sea tan difícil de solucionar. ¿Me estoy perdiendo algo justo frente a mis ojos?

¿Alguien sabe lo que podría estar pasando aquí?

0
Typewar 31 jul. 2020 a las 09:32

1 respuesta

La mejor respuesta

Aunque no veo el campo link en su mapeo (¿es source?), Sospecho que es un campo text y los campos de texto están analizados. Si desea realizar una coincidencia exacta, debe hacer coincidir en el campo link.keyword y se comportará como espera:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "link.keyword": "https://twitter.com/someUser/status/1288024417990144000"
                                 ^
                                 |
                              add this
                    }
                }
            ]
        }
    }
}
1
Val 31 jul. 2020 a las 09:01