当前位置: 首页 > 知识库问答 >
问题:

弹性搜索结果与搜索关键字不匹配

宋望
2023-03-14

我已经完成了名称索引。它包含椅子、椅子等数据。

当我尝试用“cha”搜索时,它不会返回任何椅子。这是返回“毛毯”,我期待的文件有椅子。

下面是我的代码:

BoolQueryBuilder rootBoolQuery = new BoolQueryBuilder();
MultiMatchQueryBuilder multiMatchQueryBuilder = multiMatchQuery(searchKey).field(
    SEARCH_CATEGORY_NAME_FIELD);
multiMatchQueryBuilder.fuzziness(Fuzziness.TWO);
multiMatchQueryBuilder.type(Type.BEST_FIELDS);
rootBoolQuery.must(multiMatchQueryBuilder);

搜索请求:

{"query":{"bool":{"must":[{"multi_match":{"query":"cha","fields":["categoryname^1.0"],"type":"best_fields","operator":"OR","slop":0,"fuzziness":"2","prefix_length":0,"max_expansions":50,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}},"sort":[{"productcount":{"order":"desc"}}]}

搜索响应:

{
"took": 4,
"timed_out": false,
"_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
},
"hits": {
    "total": {
        "value": 1,
        "relation": "eq"
    },
    "max_score": null,
    "hits": [
        {
            "_index": "category",
            "_type": "_doc",
            "_id": "331869",
            "_score": null,
            "_source": {
                "rootcategory": "Home",
                "categorycode": "Shag_Rugs",
                "categoryname": "        Shag Rugs",
                "categoryid": 331869,
                "parentcategory": "    Rugs",
                "productcount": 59
            },
            "sort": [
                59
            ]
        }
    ]
}

}

映射:

"categoryname": {
                "type": "text",
                "fields": {
                    "keyword": {
                        "type": "keyword",
                        "ignore_above": 256
                    }
                }
            }

我该怎么解决这个问题?

谢谢,Sri

共有1个答案

鲁熙云
2023-03-14

嗨,您可以将前缀查询用于您的用例,并让我知道它是否解决了您的目的。请点击此处获取更多信息

 类似资料:
  • 我使用的是spring数据elasticsearch(4.0版)。现在,我需要将rest高级客户端的搜索结果转换为POJO对象。 我会使用杰克逊图书馆的ObjectMapper。我相信有更好的方法来做到这一点。 Spring data elasticsearch now(4.0版)使用MappingElasticsearchConverter。不幸的是,我不知道如何做到这一点-我没有看到任何相关文

  • 由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?

  • 我正在使用批量请求执行弹性搜索完整索引。我在索引过程中遇到了一个问题,结果是空的。由于我正在完整索引期间删除索引,因此如何处理这种情况。 我已经完成了以下步骤: 删除索引 创建索引 创建映射 批量请求 索引属性和映射: } 我有大约7.5万份文件。 谢谢,Sree。

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我需要对以搜索词开头的搜索结果进行优先级排序。我用了“匹配短语前缀”。我用了“匹配短语前缀”。但它不起作用。 细节: > 质疑 结果

  • 我试图捕捉包含指定路径的路径,如path/to/my/url/variablePart,在管道条件中,我放入了ctx.url.path == 'path/to/my/url/',但不幸的是,它只获取包含path/to/my/url/的日志,而不考虑包含可变部分的其他日志,有一个通配符可以帮助我捕捉以' path/to/my/url/'开头的每个路径。?我已经试过做CTX . URL . path