3

我正在使用州代码作为查询字符串查询州,而“in”和“or”(印第安纳州和俄勒冈州)失败了,大概是因为它们是保留字。

我可以确认数据正确存在于索引中,因为当我运行时:

curl -XGET 'localhost:9200/state/_search?size=200&pretty=true' -d '{"query" : {"match_all" : {}}}' > out.txt

我可以在那里看到工作状态和非工作状态的数据。另外,如果我将 CouchDB 中非工作状态的状态代码更改为 XYZ 之类的内容,我可以通过运行上述命令并搜索 XYZ 来验证更改是否适用于 ES。所以我知道我正在查看正确的数据并且它的索引很好。

问题是查询。现在,这是我的整个查询对象的样子:

var q = {
     size: 0,
     query: {
         filtered: {
             query: { term: { postcode: 'tn' } },
             filter: { term: { version: 2 } }
         }
     },
     facets: {
         version: {  terms: { field: "version" }  },
         count : { statistical : { field : "latestValues.enroll"  } }
     }
};

如果我运行该查询,我不会得到任何结果。如果我用“tn”或“tx”或“sc”等更改“或”,那么它工作正常。

我寻找一种方法来转义保留字并找到此链接,但在运行以下查询时它似乎对我不起作用:

var q = {
    size: 0,
    query: {
        filtered: {
            query: { match_all: { } },
            filter: { term: { version: 2, postcode: 'or' } }
        }
    },
    facets: {
        version: {  terms: { field: "version" }  },
        count : { statistical : { field : "latestValues.enroll"  } }
    }
};

(请注意,当使用非保留字状态更改“或”时,该查询也有效,所以我知道这不是查询本身的问题)。

有任何想法吗?

4

1 回答 1

4

这不是关于“保留”词,而是关于停用词。您正在使用删除停用词的分析器(默认分析器,直到更新版本的 Elasticsearch)。

您需要更改该字段的分析器,请参见此处:http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html

不过,这将改变需要重新索引

于 2013-10-24T18:14:33.900 回答