Elasticsearch搜索查询仅返回完全匹配

时间:2013-05-29 06:57:16

标签: elasticsearch

我有如下查询,

任何想法,为什么我在搜索时只获得完全匹配的结果。例如 ;

当我搜索“Aegli”时,我得到了结果,但是当我搜索“Aegl”时没有返回结果

query = {
  "query": {
    "query_string": {
      "query": "%s"%q
    }
  },
  "filter": {
    "term": {
      "has_product": 1
    }
  },
  "facets": {
    "destination": {
      "terms": {
        "field": "destination.en"
      },
      "facet_filter": {
        "term": {
          "has_product": 1
        }
      }
    },
    "hotel_class": {
      "terms": {
        "field": "hotel_class"
      },
      "facet_filter": {
        "term": {
          "has_product": 1
        }
      }
    },
    "hotel_type": {
      "terms": {
        "field": "hotel_type"
      },
      "facet_filter": {
        "term": {
          "has_product": 1
        }
      }
    }
  }
}

2 个答案:

答案 0 :(得分:0)

我没有看到您的真实查询,但您可能在搜索字的末尾遗漏了*,而您的查询字符串应该是这样;

{"query_string": {"query": "%s*"}

例如;

{"query_string": {"query": "Aegl*"}

答案 1 :(得分:0)

有如下的映射

{
    "mappings": {
        "hotel": {
            'properties': {"name": {
                "type": "string",
                "search_analyzer": "str_search_analyzer",
                "index_analyzer": "str_index_analyzer"
            }
            }},

    },

    "settings": {
        "analysis": {
            "analyzer": {
                "str_search_analyzer": {
                    "tokenizer": "keyword",
                    "filter": ["lowercase"]
                },

                "str_index_analyzer": {
                    "tokenizer": "keyword",
                    "filter": ["lowercase", "substring"]
                }
            },

            "filter": {
                "substring": {
                    "type": "nGram",
                    "min_gram": 1,
                    "max_gram": 20
                }
            }
        }
    }
}

解决了我的问题