弹性搜索自动完成,搜索空间创建问题

时间:2016-02-24 13:11:01

标签: elasticsearch

我已使用Edge N gram.i索引了我的技术数据库。我使用了以下代码。

 {"settings": { 
    "analysis": {
         "analyzer": {
             "standardWithEdgeNGram": {
                 "tokenizer": "standard",
                 "filter": ["lowercase", "edgeNGram"]
             }
         },
         "tokenizer": {
             "standard": {
                 "type": "standard"
             }
         },
         "filter": {
             "lowercase": {
                "type": "lowercase"
            },
            "edgeNGram": {
                "type": "edgeNGram",
                "min_gram": 1,
                "max_gram": 15,
                "token_chars": ["letter", "digit","punctuation","whitespace","symbol"]
            }
        }
    }},"mappings": { "technologies":{
     "properties":{
                "application": {
                    "type" : "string",
                    "index": "not_analyzed"

        }

      }

  }
} 

使用此代码,我可以搜索内容。但我的问题是,当我搜索带有空格的内容时,它不会产生所需的结果。

例如,

如果我搜索“ruby”我得到输出为“ruby on rails”但是如果我搜索“ruby ser”它会给出一个输出,如“ruby on rails”,“windows server”等,但它基本上应该没有输出。 ...... plzzz帮助

1 个答案:

答案 0 :(得分:0)

应用程序“在上面的代码中 not_analyzed ,这意味着内容不会被标记化,因此当您搜索”ruby“或”ruby ser“时,两者都应该给出没有结果,因为该值存储为“ruby on rails”

您是否正在使用elasticsearch的head插件来使用“GET”运行查询? 如果是,请尝试使用 POST ,GET有ES头插件的问题,看起来GET主体没有发送到elasticsearch,因为发送一个空的_search请求会返回正在发生的索引中的所有记录在这种情况下。

如果你想在ES头插件中使用GET,那么尝试使用_source将查询与_search参数合并,如下所示:

    _search?source={"query":{"match":{"application": "ruby rails"}}} 

查看URI请求,该请求允许您使用URI中的 q 参数发送基本查询。