簡體   English   中英

Elasticsearch 多個搜索詞

[英]Elasticsearch multiple search terms

我已經設置了一個彈性指數。 我有 100,000 個文檔,所有文檔都包含以下字段

{
"Make": "NISSAN",
"Model": "FUGA",
"Body Type": "SEDAN",
"Year of Manufacture": 2012,
"Country": "JAPAN",
"Fuel Type": "PETROL"
}

我需要根據四個可能的術語創建一個搜索

  1. 制作
  2. 模型
  3. 生產年份
  4. 汽油種類

以下是搜索查詢的四種可能組合

2012 nissan fuga petrol
nissan fuga 2012 petrol
petrol 2012 nissan fuga
nissan fuga petrol 2012

假設我們對搜索查詢有正確的拼寫,下面是我嘗試基於搜索查詢進行搜索的方法

curl -X GET "localhost:9200/vehicles/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "simple_query_string" : {
        "query": "2012 NISSAN FUGA PETROL",
        "fields": ["Make","Model","Year of Manufacture","Fuel Type"]
    }
  }
} 

出乎意料,搜索返回以下錯誤

    {
    "error": {
        "root_cause": [
            {
                "type": "query_shard_exception",
                "reason": "failed to create query: {\n  \"simple_query_string\" : {\n    \"query\" : \"2012 NISSAN FUGA PETROL\",\n    \"fields\" : [\n      \"Model^1.0\",\n      \"Make^1.0\",\n      \"Year of Manufacture^1.0\",\n      \"Fuel Type^1.0\"\n    ],\n    \"flags\" : -1,\n    \"default_operator\" : \"or\",\n    \"analyze_wildcard\" : false,\n    \"auto_generate_synonyms_phrase_query\" : true,\n    \"fuzzy_prefix_length\" : 0,\n    \"fuzzy_max_expansions\" : 50,\n    \"fuzzy_transpositions\" : true,\n    \"boost\" : 1.0\n  }\n}",
                "index_uuid": "3vd2zOgHRIq3BUAJ_EATVQ",
                "index": "vehicles"
            }
        ],
        "type": "search_phase_execution_exception",
        "reason": "all shards failed",
        "phase": "query",
        "grouped": true,
        "failed_shards": [
            {
                "shard": 0,
                "index": "vehicles",
                "node": "Xl_WpfXyTcuAi2uadgB4oA",
                "reason": {
                    "type": "query_shard_exception",
                    "reason": "failed to create query: {\n  \"simple_query_string\" : {\n    \"query\" : \"2012 NISSAN FUGA PETROL\",\n    \"fields\" : [\n      \"Model^1.0\",\n      \"Make^1.0\",\n      \"Year of Manufacture^1.0\",\n      \"Fuel Type^1.0\"\n    ],\n    \"flags\" : -1,\n    \"default_operator\" : \"or\",\n    \"analyze_wildcard\" : false,\n    \"auto_generate_synonyms_phrase_query\" : true,\n    \"fuzzy_prefix_length\" : 0,\n    \"fuzzy_max_expansions\" : 50,\n    \"fuzzy_transpositions\" : true,\n    \"boost\" : 1.0\n  }\n}",
                    "index_uuid": "3vd2zOgHRIq3BUAJ_EATVQ",
                    "index": "vehicles",
                    "caused_by": {
                        "type": "number_format_exception",
                        "reason": "For input string: \"NISSAN\""
                    }
                }
            }
        ]
    },
    "status": 400
}

以下是有關我的彈性版本的更多信息

{
"name": "salim-HP-EliteBook-840-G5",
"cluster_name": "elasticsearch",
"cluster_uuid": "mSWKP4G1TSSq9rI3Hc0f6w",
"version": {
    "number": "7.5.1",
    "build_flavor": "default",
    "build_type": "tar",
    "build_hash": "3ae9ac9a93c95bd0cdc054951cf95d88e1e18d96",
    "build_date": "2019-12-16T22:57:37.835892Z",
    "build_snapshot": false,
    "lucene_version": "8.3.0",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"

}

以下是vehicles索引的索引映射

    {
    "vehicles": {
        "mappings": {
            "_meta": {
                "created_by": "ml-file-data-visualizer"
            },
            "properties": {
                "Body Type": {
                "type": "keyword"
                },
                "Country": {
                    "type": "keyword"
                },
                "Fuel Type": {
                    "type": "keyword"
                },
                "Make": {
                    "type": "keyword"
                },
                "Model": {
                    "type": "text"
                },
                "Year of Manufacture": {
                    "type": "long"
                }
            }
        }
    }
}

如何根據我的搜索條件進行成功搜索?

更新

cross_fieldssynonym標記過濾器。

一個工作示例:

映射(更新)

PUT my_index
{
  "mappings": {
    "properties": {
      "Make": {
        "type": "text"
      },
      "Model": {
        "type": "text"
      },
      "Body Type": {
        "type": "text"
      },
      "Year of Manufacture": {
        "type": "text",
        "fields": {
          "long": {
            "type": "long"
          }
        }
      },
      "Country": {
        "type": "text"
      },
      "Fuel Type": {
        "type": "text"
      }
    }
  },
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_syn_filt": {
            "type": "synonym",
            "synonyms": [
              "nisson,nissen => nissan",
              "foga => fuga"
            ]
          }
        },
        "analyzer": {
          "my_synonyms": {
            "filter": [
              "lowercase",
              "my_syn_filt"
            ],
            "tokenizer": "standard"
          }
        }
      }
    }
  }
}

索引幾個文件

PUT my_index/_doc/1
{
  "Make": "NISSAN",
  "Model": "FUGA",
  "Body Type": "SEDAN",
  "Year of Manufacture": 2012,
  "Country": "JAPAN",
  "Fuel Type": "PETROL"
}

PUT my_index/_doc/2
{
  "Make": "NISSAN",
  "Model": "FUGA",
  "Body Type": "SEDAN",
  "Year of Manufacture": 2013,
  "Country": "JAPAN",
  "Fuel Type": "PETROL"
}

PUT my_index/_doc/3
{
  "Make": "FIAT",
  "Model": "FUGA",
  "Body Type": "SEDAN",
  "Year of Manufacture": 2014,
  "Country": "JAPAN",
  "Fuel Type": "PETROL"
}

搜索查詢(更新)

GET my_index/_search
{
  "query": {
    "multi_match": {
      "query": "NISSON FOGA 2012 PETROL",   ---> nisson and foga
      "fields": ["Make","Model","Year of Manufacture","Fuel Type"],
      "type": "cross_fields",
      "operator": "and",
      "analyzer": "my_synonyms"
    }
  }
}

結果

"hits" : [
  {
    "_index" : "my_index",
    "_type" : "_doc",
    "_id" : "1",
    "_score" : 1.2605431,
    "_source" : {
      "Make" : "NISSAN",
      "Model" : "FUGA",
      "Body Type" : "SEDAN",
      "Year of Manufacture" : 2012,
      "Country" : "JAPAN",
      "Fuel Type" : "PETROL"
    }
  }
]

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM