Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列表中字段的Elasticsearch筛选_List_Search_Filter_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,List,Search,Filter,elasticsearch" /> elasticsearch,List,Search,Filter,elasticsearch" />

List 列表中字段的Elasticsearch筛选

List 列表中字段的Elasticsearch筛选,list,search,filter,elasticsearch,List,Search,Filter,elasticsearch,我在弹性搜索中筛选列表中的字段时遇到问题。我正在为简单的JSON对象编制索引以进行搜索和筛选 正在编制索引的示例对象为: { "id" : 1, "name" : "My Inventory", "description" : "This is a piece of inventory.", "sizes" : [ "big", "small" ], "geos" : [ { "country" : "US", "fullName" : "United

我在弹性搜索中筛选列表中的字段时遇到问题。我正在为简单的JSON对象编制索引以进行搜索和筛选

正在编制索引的示例对象为:

{ 
    "id" : 1,
    "name" : "My Inventory",
    "description" : "This is a piece of inventory.",
    "sizes" : [ "big", "small" ],
    "geos" : [ { "country" : "US", "fullName" : "United States" } ]
}
我可以很容易地通过id、名称、描述和大小进行过滤,但当我尝试在geo上进行过滤时,我遇到了麻烦。下面是我尝试使用的过滤器。我将非常感激任何能让我走上正确方向的指针。谢谢

curl -XPOST 'localhost:9200/stuff/inventory/_search?pretty=true' -d '
    {
        "fields" : [ "name" ],
        "filter" : {
            "terms" : { "geos.country" : [ "US" ] }
        }
    }
'

默认情况下,将分析字符串字段(“分解为可搜索的术语”是字符串字段的描述方式)。这不适用于术语过滤器,因为术语过滤器进行精确匹配,但字段将包含可能更改的版本

您可以通过在映射中设置
“index”:“not_analysis”
告诉Elasticsearch不要这样做。geos字段的映射应如下所示

"geos" : { 
    "type" : "object",
    "properties" : {
        "country" : { "type" : "string", "index" : "not_analyzed" },
        "fullName" : { "type" : "string" } 
    } 
}

您可能还需要将fullName设置为
未分析
,具体取决于您将如何使用它。如果要将其用于术语查询或过滤器,则不应对其进行分析;如果要进行模糊匹配、拼写更正等,应进行分析。

是否使用了正确的映射?你得到了什么?如果问题是您得到0个结果,那么可能是因为您索引了小写字母?试试“我们”。或者如果您使用defaukt映射,“us”是一个停止字,因此它根本不会被索引。@javanna您是对的。我只是对所有字段使用了默认索引,除了我正在排序的字段,但使用小写是有效的。谢谢。因为国家代码只是一个单词,所以我可以将术语过滤器的大小写降低。如果我试图对全名字段或其他使用多个术语的字段进行术语筛选,则此信息肯定会有所帮助。为什么默认分析器不起作用?是因为国家字段是2个字符,还是一个停止字。我不太清楚为什么默认分析器没有索引术语“我们”。