簡體   English   中英

elasticsearch match_phrase_prefix查詢不適用於analyzer_startswith

[英]elasticsearch match_phrase_prefix query not working with analyzer_startswith

我是Elasticsearch的新手,當我在單個字段上使用匹配短語前綴時,如果我在多個字段上使用匹配短語pefix,則它將不起作用。 為了搜索混合,121下面的查詢我得到的結果當feild3大於4位數時,我需要以1位數開頭的結果。 我的查詢看起來像這樣:

{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase_prefix": {
            "feild1": "p"
          }
        },
        {
          "bool": {
            "must": [
              {
                "match_phrase_prefix": {
                  "feild2": {
                    "query": "HYBRID "
                  }
                }
              },
              {
                "match_phrase_prefix": {
                  "feild3": {
                    "query": "121"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  },
  "from": "0",
  "size": "10"
}

feild3在數據庫中很長,我在加載數據時將long轉換為char。

我的映射:

{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "analyzer_startswith": {
            "tokenizer": "keyword",
            "filter": "lowercase"
          }
        }
      }
    }
  },
  "mappings": {
    "pty": {
      "properties": {
        "feild2": {
          "search_analyzer": "analyzer_startswith",
          "analyzer": "analyzer_startswith",
          "type": "string"
        },
        "feild3": {
          "search_analyzer": "analyzer_startswith",
          "analyzer": "analyzer_startswith",
          "type": "string"
        }
      }
    }
  }
}

誰能幫助我擺脫困境。

對於您的用例。 您的映射應如下所示:

PUT index_name
{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "analyzer_startswith": {
                        "tokenizer": "keyword",
                        "filter": "lowercase"
                    }
                }
            }
        }
    },
    "mappings": {
        "type_name": {
            "properties": {
                "field1": {
                    "analyzer": "analyzer_startswith", 
                    "search_analyzer": "analyzer_startswith",
                    "type": "text"
                },
                "field2": {
                    "analyzer": "analyzer_startswith", 
                    "search_analyzer": "analyzer_startswith",
                    "type": "text"
                },
                "field3": {
                    "analyzer": "analyzer_startswith", 
                    "search_analyzer": "analyzer_startswith",
                    "type": "text"
                }
            }
        }
    }
}

樣本文件:

POST index_name/type_name
{
  "field1":"hatim",
  "field2":"stovewala",
  "field3":"india"
}

查詢應該是這樣的:

GET index_name/type_name/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase_prefix": {
            "field1": "hat"
          }
        },
        {
          "bool": {
            "must": [
              {
                "match_phrase_prefix": {
                  "field2": "s"
                }
              },
              {
                "match_phrase_prefix": {
                  "field3": "in"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

暫無
暫無

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

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