我已使用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帮助
答案 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 参数发送基本查询。