2015-03-02 45 views
0

我的关键字分析仪默认分析,像这样:如何使用关键字分析器进行搜索?

{ 
    "settings": { 
    "index": { 
     "analysis": { 
     "analyzer": { 
      "default": { 
      "type": "keyword" 
}}}}}} 

```

但现在我不能搜索任何东西。例如:

{ 
    "query": { 
    "query_string": { 
     "query": "cast" 
}}} 

虽然“cast”是索引文档中的一个常见值,但给了我全部0个结果。 (http://gist.github.com/baelter/b0720a52ee5a27e27d3a

搜索“*”工作得很好顺便说一句。

我只有在我的映射明确的默认值:

{ 
    "oceanography_point": { 
    "_all" : { 
     "enabled" : true 
    }, 
    "properties" : {} 
} 
} 

该指数表现为如果没有字段包括在_all,因为现场:值查询工作正常。

我滥用关键字分析器吗?

回答

1

使用关键字分析器,你只能做一个确切的字符串匹配。 让我们假设您已经使用关键字分析器并且没有过滤器。 在这种情况下,对于字符串索引为“Cast in forest”的字符串,搜索“cast”或“away”都不起作用。你需要做一个精确的“在森林中抛弃”字符串来匹配它。 (假设没有使用小写字母的过滤器,你也需要给出正确的例子)

更好的方法是使用multi fields来声明一个副本作为关键字分析和其他正常。 您可以在其中一个字段上进行搜索并在另一个字段上进行聚合。

+0

是,我知道还有其他方法可以实现文本搜索,但是在这种情况下,“投射”完全匹配。 – abaelter 2015-03-02 14:02:02

+0

你可以粘贴* – 2015-03-02 14:07:57

+0

的结果没有太多的粘贴,我得到一个命中数组与我的支持couchdb db中的所有文件。 – abaelter 2015-03-02 16:20:45

1

欧凯,试验和错误的一些15小时我可以断定,这个工程的搜索:

{ 
    "settings": { 
    "index": { 
     "analysis": { 
     "tokenizer": { 
      "default": { 
      "type": "keyword" 
}}}}}} 

如何过这打破了小面,所以我结束了使用动态模板来代替:

"dynamic_templates" : [ 
    { 
    "strings_not_analyzed" : { 
     "match" : "*", 
     "match_mapping_type" : "string", 
     "mapping" : { 
     "type" : "string", 
     "index" : "not_analyzed" 
     } 
    } 
    } 
], 
相关问题