弹性搜索,小写搜索不起作用

时间:2017-06-30 18:22:43

标签: elasticsearch nest

我正在尝试使用前缀再次搜索内容,如果我搜索二极管,我会得到与二极管不同的结果。如何在二极管和二极管返回相同结果的情况下获得ES返回结果?这是我在ES中使用的映射和设置。

"settings":{
   "analysis": {
   "analyzer": {
      "lowercasespaceanalyzer": {
      "type": "custom",
       "tokenizer": "whitespace",
       "filter": [
         "lowercase"
       ]
     }
   }
  }   
 },
"mappings": {
"articles": {
  "properties": {
    "title": {
      "type": "text"
    },
    "url": {
      "type": "keyword",
      "index": "true"
    },
    "imageurl": {
      "type": "keyword",
      "index": "true"
    },
    "content": {
      "type": "text",
      "analyzer" : "lowercasespaceanalyzer",
      "search_analyzer":"whitespace"
      },
    "description": {
      "type": "text"
    },
    "relatedcontentwords": {
      "type": "text"
    },
    "cmskeywords": {
      "type": "text"
    },
    "partnumbers": {
      "type": "keyword",
      "index": "true"
    },
    "pubdate": {
      "type": "date"
     }
    }
   }
 }

 here is an example of the query I use 
 POST _search
 {
   "query": {
        "bool" : {
            "must" : {
                "prefix" : { "content" : "capacitance" }
        }
     }
  }
 }

2 个答案:

答案 0 :(得分:0)

索引中不会有Diode个字词。因此,如果您想获得相同的结果,则应该让同一分析器分析您的查询上下文。

您可以使用Query string query之类的

"query_string" : {
        "default_field" : "content",
        "query" : "Diode",
        "analyzer" :  "lowercasespaceanalyzer"
    }

<强>更新

您可以在查询之前分析您的上下文。

AnalyzeResponse resp = client.admin().indices()
                             .prepareAnalyze(index, text)
                             .setAnalyzer("lowercasespaceanalyzer")
                             .get();
String analyzedContext = resp.getTokens().get(0);
...

然后使用analyzedContext作为新的查询上下文。

答案 1 :(得分:0)

发生这种情况是因为您在搜索时和索引时使用了两个不同的分析器。 因此,当您在搜索时输入查询“Diod”,因为您使用“whitespace”分析器时,您的查询将被解释为“Diod”。 但是,因为在索引时使用“lowercasespaceanalyzer”,“Diod”将被索引为“diod”。只需在搜索和索引时使用相同的分析器,或者使用降低字符串的分析器,因为默认的“空白”分析器不会https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html