ElasticsearchOperations查询不返回完全匹配

我在 Elastic 搜索中遇到查询很困难,所以我希望这里有人可以帮助我。

所以我在弹性搜索中有一个索引,它存储了用户的一些基本信息。然后我有我的 Spring Boot API,它允许客户端搜索所述索引。

在我的应用程序中,当用户注册时,他们可以在网站上选择一个显示名称。现在,当他们输入显示名称时,我希望能够检查弹性并告诉他们它是否被采用。

但是,我挣扎的地方是,假设我的索引中有一个用户的 DisplayName 为“John Boy”,现在用户两个注册并希望显示名称为“Boy”。当我搜索“男孩”是否被占用时,我会返回“约翰男孩”。我想要它,所以查询告诉我“男孩”是否免费,而不关心“约翰男孩”是否被占用。

我以为我只是在了解 ES,但也许不是,我的印象是该字段(请参阅下面的索引映射)关键字我可以进行术语搜索并获得完全匹配?

下面我已经包含了我的 Pojo 和我的 ES 索引映射。请如果有人可以帮助我....感谢阅读:

搜索方法

  public long checkUserNameAvailability(String query) {

        QueryBuilder matchSpecificFieldQuery= QueryBuilders
                .termQuery("displayName", query);

                Query searchQuery = new NativeSearchQueryBuilder()
                .withFilter(matchSpecificFieldQuery)
                .build();

        SearchHits<UserProfile> searchSuggestions =
                elasticsearchOperations.search(searchQuery,
                        UserProfile.class,
                        IndexCoordinates.of(elasticUserIndex));

        List<UserProfile> suggestions = new ArrayList<>();

        return searchSuggestions.getTotalHits();
    }

波乔

@Getter
@Setter
@Document(indexName = "userprofiles")
public class UserProfile {

    @Field(type = FieldType.Text, name = "userId")
    private String userId;

    @Field(type = FieldType.Keyword, name = "displayName")
    private String displayName;

    @Field(type = FieldType.Text, name = "name")
    private String name;

}

ES映射

{
  "userprofiles": {
    "mappings": {
      "properties": {
        "displayName": {
          "fields": {
            "keyword": {
              "ignore_above": 256,
              "type": "keyword"
            }
          },
          "type": "text"
        },
        "name": {
          "fields": {
            "keyword": {
              "ignore_above": 256,
              "type": "keyword"
            }
          },
          "type": "text"
        },
        "userId": {
          "fields": {
            "keyword": {
              "ignore_above": 256,
              "type": "keyword"
            }
          },
          "type": "text"
        }
      }
    }
  }
}

旁注:我使用的是 Spring Boot 2.4.3 版

    compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')
    compile group: 'org.springframework.data', name: 'spring-data-elasticsearch', version: '4.1.5'

再次非常感谢

以上是ElasticsearchOperations查询不返回完全匹配的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>