Notes de finition d'Elasticsearch (4)

requête de combinaison de filtres :

POST  http://localhost:9200/order_server/order/_search

{
"_source":false,
  "query": {
    "bool": {
      "filter": [
        {"term":{
            "status":1
        }},
        {"term":{
            "extras.student_name":"张三"
        }},
        {"range":{
            "status":{"gte":1,"lt":100}
        }},
        {"terms":{
            "status":[1,2,3,4]
        }},
        {"wildcard":{
            "context":"*长河*"
        }},
        {"multi_match":{
            "query": "佳木斯第二中学",
            "fields": ["extras.school_name", "extras.grade"],
            "type":"most_fields"
        }}
      ]
    }
  }
}

Parmi eux, "_source": false signifie qu'aucune donnée n'a besoin d'être renvoyée, et _id peut être obtenu à partir de "hits".."hits"[]."_id".

S'il s'agit de la segmentation de mot par défaut, la requête exacte de terme ne sera pas trouvée, car es a déjà été divisé. Si vous n'avez pas besoin de diviser l'entreprise, vous pouvez définir la segmentation sans mot par défaut lors de la création de l'index.

METTRE  http://localhost:9200/order_server

{
	"settings": {
		"index": {
			"number_of_shards": "1",
			"number_of_replicas": "5"
		}
	},
	"analysis": {
		"analyzer": {
			"default": {
				"type": "keyword"
			}
		}
	}
}

Vous pouvez utiliser la recherche floue générique pour une recherche floue sans segmentation de mots, ajoutez simplement le caractère générique * avant et après la valeur.

{
	"_source": false,
	"query": {
		"bool": {
			"filter": [{
				"wildcard": {
                    "order_id":"*3*"
				}
			}]
		}
	}
}

Notez que le order_id doit être de type chaîne, si c'est un entier, une erreur sera signalée

{
    "error": {
        "root_cause": [
            {
                "type": "query_shard_exception",
                "reason": "……",
                "index_uuid": "……",
                "index": "……"
            }
        ],
        "type": "search_phase_execution_exception",
        "reason": "all shards failed",
        "phase": "query",
        "grouped": true,
        "failed_shards": [
            {
                "shard": 0,
                "index": "……",
                "node": "……",
                "reason": {
                    "type": "query_shard_exception",
                    "reason": "……",
                    "index_uuid": "……",
                    "index": "……",
                    "caused_by": {
                        "type": "number_format_exception",
                        "reason": "For input string: \"*3*\""
                    }
                }
            }
        ]
    },
    "status": 400
}

 

Les champs de type texte ne prennent pas en charge le tri par défaut. Si le tri est requis, des données de champ supplémentaires peuvent être définies pour le champ. Après la configuration, les données historiques peuvent prendre en charge le tri.

METTRE  http://localhost:9200/order_server/_mapping/order

{
    "properties":{
        "user_id":{
            "type": "text",
            "fielddata": true
        }      
    }
}

 

おすすめ

転載: blog.csdn.net/sm9sun/article/details/108802623