首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ElasticSearch -模糊搜索java api结果不正确

ElasticSearch -模糊搜索java api结果不正确
EN

Stack Overflow用户
提问于 2018-10-06 01:10:01
回答 1查看 1.1K关注 0票数 0

我在elasticsearch中对示例文档进行了索引,并尝试使用模糊查询进行搜索。但我没有得到任何结果时,我使用Java模糊查询api搜索。

请找到我的以下映射脚本:

代码语言:javascript
复制
PUT productcatalog
 {
    "settings": {
        "analysis": {
            "analyzer": {
                "attr_analyzer": {
                    "type": "custom",
                    "tokenizer": "letter",
                    "char_filter": [
                        "html_strip"
                    ],
                    "filter": ["lowercase", "asciifolding", "stemmer_minimal_english"]
                }
            },
            "filter" : {
                "stemmer_minimal_english" : {
                    "type" : "stemmer",
                    "name" : "minimal_english"
                }
            }
        }
    },
    "mappings": {
        "doc": {
            "properties": {
                "values": {
                    "type": "text",
                    "analyzer": "attr_analyzer"
                },
                "catalog_type": {
                    "type": "text"
                },
                "catalog_id":{
                    "type": "long"
                }
            }
        }
    }
}

请查找我的样本数据。

代码语言:javascript
复制
PUT productcatalog/doc/1
{
    "catalog_id" : "343",
    "catalog_type" : "series",
    "values" : "Activa Rooftop, valves, VG3000, VG3000FS, butterfly, ball"
}


PUT productcatalog/doc/2
{
    "catalog_id" : "12717",
    "catalog_type" : "product",
    "values" : "Activa Rooftop, valves"
}

请查找我的搜索脚本:

代码语言:javascript
复制
GET productcatalog/_search
{
    "query": {
        "match" : {
            "values" : {
                "query" : " activa rooftop VG3000",
                "operator" : "and",
                 "boost": 1.0,
                "fuzziness": 2,
                "prefix_length": 0,
                "max_expansions": 100


            }
        }
    }
}

我得到了上述查询的以下结果:

代码语言:javascript
复制
{
  "took": 239,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.970927,
    "hits": [
      {
        "_index": "productcatalog",
        "_type": "doc",
        "_id": "1",
        "_score": 0.970927,
        "_source": {
          "catalog_id": "343",
          "catalog_type": "series",
          "values": "Activa Rooftop, valves, VG3000, VG3000FS, butterfly, ball"
        }
      }
    ]
  }
}

但是如果我使用下面的Java API进行同样的模糊搜索,我不会得到任何结果。

请查找我的以下Java API查询以进行模糊搜索:

代码语言:javascript
复制
QueryBuilder qb = QueryBuilders.boolQuery()
               .must(QueryBuilders.fuzzyQuery("values", keyword).boost(1.0f).prefixLength(0).maxExpansions(100));

更新1

我已经尝试使用以下查询

代码语言:javascript
复制
QueryBuilder qb = QueryBuilders.matchQuery(QueryBuilders.fuzzyQuery("values", keyword).boost(1.0f).prefixLength(0).maxExpansions(100));

但是我不能在matchQuery中传递QueryBuilders。我在写这个查询The method matchQuery(String, Object) in the type QueryBuilders is not applicable for the arguments (FuzzyQueryBuilder)时得到了这个建议

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-07 01:26:58

提到的java查询不是match查询。这是一个must查询。您应该使用matchQuery而不是boolQuery().must(QueryBuilders.fuzzyQuery())

更新1

fuzzy queryterm查询,而match query全文查询。

也不要忘记,在匹配查询中,缺省操作符是default,您应该像您的or查询一样将其更改为and

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52670407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档