使用ElasticSearch Java API对日期进行模糊查询(Fuzzy query on dates with ElasticSearch Java API)
我正在尝试通过ElasticSearch Java API执行以下查询
{
"query" : {
"fuzzy" : {
"dateOfBirth" : {
"value" : "1944-11-30",
"fuzziness" : "365d"
}
}
}
}
我不明白如何在这种查询中指定365天的fuzzines值。
I'm trying to perform the following query through ElasticSearch Java API
{
"query" : {
"fuzzy" : {
"dateOfBirth" : {
"value" : "1944-11-30",
"fuzziness" : "365d"
}
}
}
}
I doesn't understand how to specify the fuzzines value for 365 days in this kind of query.
原文:https://stackoverflow.com/questions/35406113
更新时间:2019-11-30 05:04
最满意答案
你可以用这个:
FuzzyQueryBuilder queryBuilder = fuzzyQuery("dateOfBirth" ,"1944-11-30" ).fuzziness(Fuzziness.build("365d"))
希望这可以帮助
You can use this:
FuzzyQueryBuilder queryBuilder = fuzzyQuery("dateOfBirth" ,"1944-11-30" ).fuzziness(Fuzziness.build("365d"))
Hope this helps
2016-02-15
相关问答
如果您希望这两个查询返回相同的结果,则需要使用相同类型的查询。 在您的Sense查询中,您正在执行匹配查询: "query": {
"match" : {
"name" : "some string"
}
}
但在Java代码中,您正在执行termQuery: QueryBuilder qb = QueryBuilders.termQuery("name", "some string");
因此,要回答您的问题,请在Java代码中使用匹配查询: QueryBui
...
我选择创建一个新查询而不是修改现有查询。 MultiMatchQueryBuilder fuzzyMmQueryBuilder = multiMatchQuery(
theUsersQueryString, "field1", "field2", ... , "fieldn").fuzziness("AUTO");
BoolQueryBuilder b = boolQuery().should(fuzzyMmQueryBuilder);
SearchRequest
...
你可以用这个: FuzzyQueryBuilder queryBuilder = fuzzyQuery("dateOfBirth" ,"1944-11-30" ).fuzziness(Fuzziness.build("365d"))
希望这可以帮助 You can use this: FuzzyQueryBuilder queryBuilder = fuzzyQuery("dateOfBirth" ,"1944-11-30" ).fuzziness(Fuzziness.build("365d")
...
你需要这样的东西(java8): public class MyQueryPlugin extends Plugin implements SearchPlugin {
@Override public List> getQueries() {
return Arrays.asList(
new QuerySpec<>("my_query", MyQueryBuilder::new, MyQueryBuilder:
...
啊哈。 可以像这样添加: should(QueryBuilders.fuzzyQuery(Company.FIELD_NAME, query).maxExpansions(1).prefixLength(query.length() - 1)
Aha. Can add like this: should(QueryBuilders.fuzzyQuery(Company.FIELD_NAME, query).maxExpansions(1).prefixLength(query.length()
...
您通过Java发送的请求格式不正确:没有“facets”:{“0”:{...}}参与其中。 (至少缺少'0')。 因此服务器似乎忽略了那部分,只给你一堆原始条目(默认输出) The problem was the type of request, I had to send a POST request instead of a GET one. Used this code : String url = "http://10.60.74.134:9200/logstash-2015.04.09/
...
按照以下基础知识连接到您的ES群集: https : //www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html 您的查询将向管理界面询问英语分析器的AnalyzeRequest(索引,查询): ESClient.admin().indices().analyze(new AnalyzeRequest("snomed_v1", "12 O'clock, superior margin").analyzer(
...
这种类型的查询使用query_string查询。 java代码应该如下所示: SearchRequestBuilder searchRequestBuilder = new SearchRequestBuilder(client);
searchRequestBuilder.setIndices("mongoindex");
searchRequestBuilder.setTypes("files");
QueryStringQueryBuilder queryStringQueryBuilder
...
它应该是QueryBuilders.fuzzyQuery("name", "kimchy").maxExpansion(5) 。 但是,遗憾的是,目前缺少maxExpansion()方法。 因此,在合并此拉取请求之前,发送此查询的唯一方法是直接在json中表达它。 您可以使用XContentBuilder来完成。 It supposed to be QueryBuilders.fuzzyQuery("name", "kimchy").maxExpansion(5). But, unfortunat
...
您需要为此使用query_string查询。 QueryStringQueryBuilder qs = QueryBuilders.queryStringQuery("name_s:'Joe Bloggs' AND age_i:15");
client.prepareSearch(index).setQuery(qs);
You'd need to use a query_string query for this. QueryStringQueryBuilder qs = QueryBuild
...