我有以下映射:
"urls": {
"type": "string",
"index_name": "url",
"boost": "1",
"analyzer": "aurlemail",
"store": "yes"
}
,分析仪定义如下:
index.analysis.analyzer.aurlemail:
type: custom
tokenizer: uax_url_email
filter: lowercase, fngramurl
index.analysis.filter.fngramurl:
type: nGram
min_gram: 3
max_gram: 20
我将http://www.google.com
和http://www.google.com/hugo
添加到索引中,这是两个单独的文档。
当我在特定字段上执行termQuery
时,我会得到预期的匹配(例如,我搜索www.google.com
或google.com
),但是当我只想要一个简单的查询时,我没有定义任何我得到零结果的字段。
代码如下所示:
client().prepareSearch("myindex").setQuery("www.google.com")
.execute().actionGet();
如何在不必分别指定termQuery
特定字段的情况下获得结果?
更新
更具体:我想在查询 google ,甚至 com 时也会收到匹配。由于定义的分析器(我想),这应该在索引中可用,但matchQuery
和stringQuery
都不能按预期工作
更新2
有问题的ES版本是1.1.0
答案 0 :(得分:1)
使用默认字段的查询字符串查询为" _all"。
client().prepareSearch("myindex").setQuery(QueryBuilders.queryString("www.google.com")
.defaultField("_all")).execute().actionGet();
<强>更新强>
匹配查询
client().prepareSearch("myindex").setQuery(QueryBuilders.matchQuery("_all", "google")).execute().actionGet();
希望它有帮助..!