Java ElasticSearch-matchPhraseQuery API,用于使用多个字段进行搜索
Am搜索具有Java ElasticSearch-matchPhraseQuery API,用于使用多个字段进行搜索,java,elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack,Am搜索具有ngram标记器的特定字段,Am使用matchPhraseQuery查询该字段(代码),该字段工作正常 现在,我想用3个字段进行搜索。我们怎样才能做到这一点 请找到我的java代码,它只搜索一个字段(代码) 请在下面查找我的映射详细信息: PUT products { "settings": { "analysis": { "analyzer": { "custom_analyzer": { "type": "custom", "tokenizer
ngram
标记器的特定字段,Am使用matchPhraseQuery
查询该字段(代码),该字段工作正常
现在,我想用3个字段进行搜索。我们怎样才能做到这一点
请找到我的java代码,它只搜索一个字段(代码)
请在下面查找我的映射详细信息:
PUT products
{
"settings": {
"analysis": {
"analyzer": {
"custom_analyzer": {
"type": "custom",
"tokenizer": "ngram",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"code": {
"type": "text",
"analyzer": "custom_analyzer"
},
"attribute" : {
"type" : "text",
"analyzer" : "custom_analyzer"
},
"term" : {
"type" : "text",
"analyzer" : "custom_analyzer"
}
}
}
}
}
现在,我想对代码、属性和术语三个字段进行搜索查询
我尝试了以下java代码,但未按预期工作:
BoolQueryBuilder orQuery = QueryBuilders.boolQuery();
QueryBuilder qb1 = QueryBuilders.matchPhraseQuery("catalog_keywords", keyword);
QueryBuilder qb2 = QueryBuilders.matchPhraseQuery("product_keywords", keyword);
orQuery.should(qb1);
orQuery.should(qb2);
orQuery.minimumShouldMatch(1);
searchSourceBuilder.query(orQuery);
searchSourceBuilder.size(10);
searchRequest.source(searchSourceBuilder);
我的输入查询:
Logi
我越来越喜欢:
"Materiały, programy doborowe | Marketing | Katalogi, broszury"
这与我的问题完全无关。预期结果是,Logiciels
我的字段的值带有分隔符|
,因此我只需要单词/字符的精确匹配。它不应使用所有分隔符和全部进行打印。使用:
我用java api尝试过类似的方法,但效果不太好。我用细节更新了我的问题。你知道如何在java api中形成多匹配查询吗?
"Materiały, programy doborowe | Marketing | Katalogi, broszury"
GET products/_search
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"FIELD": "PHRASE"
}
},
{
"match_phrase": {
"FIELD": "PHRASE"
}
},
{
"match_phrase": {
"FIELD": "PHRASE"
}
}
]
}
}
}