我正在使用Spring data elasticsearch查询我的elastic文档。我的Elasticsearch实体类:
//all the annotation things i.e lombok, de/serializer etc
@Document(indexName = "project", type = "project")
@EqualsAndHashCode
public class ProjectEntity extends CommonProperty implements Serializable {
@Id
private String id;
private String projectName;
private String description;
private String parentProjectId;
private Long projectOwner;
private String projectOwnerName;
private Long projectManager;
private String projectManagerName;
private String departmentId;
private String status;
private String organizationId;
@Field(type = FieldType.Nested)
private List<ActionStatusEntity> actionStatusList= new ArrayList<>();
@Field(type = FieldType.Nested)
private List<TeamMember> teamMemberList;
@Field(type = FieldType.Nested)
private List<UserDefineProperty> riskList;
}
为了简洁起见,我还做了其他事情,比如设置存储库。数据搜索:
projectRepository.findByOrganizationIdAndProjectName(userEntity.getOrganizationId().toString() ,projectRequest.getProjectName().trim());
//userEntity.getOrganizationId().toString()="28", projectName="Team Test"
Spring为上述调用生成的查询:
{
"from": 0,
"size": 10000,
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "28",
"fields": [
"organizationId^1.0"
],
"type": "best_fields",
"default_operator": "and",
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1
}
},
{
"query_string": {
"query": "Team Test",
"fields": [
"projectName^1.0"
],
"type": "best_fields",
"default_operator": "and",
"max_determinized_states": 10000,
"enable_position_increments": true,
"fuzziness": "AUTO",
"fuzzy_prefix_length": 0,
"fuzzy_max_expansions": 50,
"phrase_slop": 0,
"escape": false,
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"version": true
}
查询结果:
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 4.1767306,
"hits" : [
{
"_index" : "project",
"_type" : "project",
"_id" : "215",
"_version" : 2,
"_score" : 4.1767306,
"_source" : {
"projectName" : "team member only test",
"description" : "team member only test",
"projectOwner" : 50,
"projectOwnerName" : "***",
"departmentId" : "team member only test",
"organizationId" : "28"
}
},
{
"_index" : "project",
"_type" : "project",
"_id" : "408",
"_version" : 17,
"_score" : 4.1767306,
"_source" : {
"projectName" : "Category & Team adding test",
"description" : "Category & Team adding test",
"projectOwner" : 50,
"projectOwnerName" : "***",
"projectManager" : 50,
"projectManagerName" : "***",
"departmentId" : "cat",
"organizationId" : "28"
}
},
{
"_index" : "project",
"_type" : "project",
"_id" : "452",
"_version" : 4,
"_score" : 3.4388955,
"_source" : {
"projectName" : "team member not in system test",
"description" : "id-452",
"projectOwner" : 53,
"projectOwnerName" : "***",
"projectManager" : 202,
"projectManagerName" : "***",
"departmentId" : "abc",
"organizationId" : "28",
}
}
]
}
}
查看结果集,检查项目名称字段值,如包含方法!它没有检查完整的给定参数<为什么会这样?如何解决这些问题
Add:organizationId和projectName字段设置为fieldData=true
我不知道Spring Data Elasticsearch,但添加了一个带有JSON格式的索引数据、搜索查询和搜索结果的工作示例
指数数据:
为上述三个文件编制索引(有问题),并插入第四个文件,如下所示。
{
"projectName": "team test",
"description": "id-452",
"projectOwner": 53,
"projectOwnerName": "***",
"projectManager": 202,
"projectManagerName": "***",
"departmentId": "abc",
"organizationId": "28"
}
搜索查询:
{
"query": {
"bool": {
"must": [
{
"match": {
"organizationId": 28
}
},
{
"multi_match": {
"query": "Team Test",
"type": "phrase",
"fields": [
"projectName"
]
}
}
]
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64151693",
"_type": "_doc",
"_id": "4",
"_score": 0.5003766,
"_source": {
"projectName": "team test",
"description": "id-452",
"projectOwner": 53,
"projectOwnerName": "***",
"projectManager": 202,
"projectManagerName": "***",
"departmentId": "abc",
"organizationId": "28"
}
}
]
Spring Data Elasticsearch从方法名派生的查询是一个Elasticsearch字符串查询,具有您注意到的给定参数。对于这些Elasticsearch,分析和解析术语,然后搜索具有相同顺序的这些术语的文档。
您对“团队测试”的查询有两个术语,“团队”和“测试”,您显示的所有文档在项目名称中都有这些术语,因此它们会被返回。
如果您有一个包含“团队测试”的文档,而这两者之间没有其他术语,则会以更高的分数返回。
选择此实现是因为它是在Elasticsearch中搜索时通常期望的。具有带有名称的索引并搜索“Harry Miller”的图像不会找到带有“Harry B. Miller”的文档。
您可以编写一个自定义存储库方法来构建满足您需求的查询,并使用它。或者,如果您总是想对此字段进行精确搜索,可以将其定义为一个关键字字段,以防止解析和分析。
您可以将match_短语查询与此存储库方法定义一起使用(此处仅使用一个参数,您需要添加组织id,但结果查询对于这个小代码示例来说太复杂):
@Query("{\"match_phrase\": {\"projectName\": \"?0\"}}\n")
SearchHits<ProjectEntity> findByProjectName(String name);
这是我索引中的文档(也可以有几个): 从逻辑上讲,我试图建立这个条件: 我的问题(来自kibana): 我正在与上述范围内的字段的范围查询与上面的其他字段进行比较。但没有得到任何命中!我想检索具有在给定和日期。 在这个领域很缺乏经验,不知道为什么不起作用!请帮助如何修复此查询以做到这一点?
我想根据X列重新划分spark dataframe。假设X列有3个不同的值(X1,X2,X3)。不同值的数量可能会变化。 我希望一个分区包含只有1个X值的记录。也就是说,我想要3个分区,其中1有x=x1的记录,其他的有x=x2,最后一个有x=x3的记录。 我正在做的重新划分 但是,我在DF中的分区并没有像预期的那样出现。由于一个分区为空,第二个分区包含X1的记录,第三个分区同时包含X2和X3的记录
问题内容: 我正在尝试使用python scipy模块中的一个非常基本的示例作为方法,但是没有给出预期的结果。我在pylab模式下使用Ipython。 如果我打印数组“ a”和“ b”的内容,它们是相似的。 期望是:(这将在Matlab中转置结果) 问题答案: NumPy有效地反转了数组的形状。如果数组是一维的,则意味着它无效。 在NumPy中,数组 和 实际上是相同的–它们只是空白不同。您可能想
这是我的示例es索引文档:
动机:我正在设计一个access数据库来跟踪我员工的培训状态。每个员工都有基于其角色的培训要求(例如,行政助理必须接受记录管理培训和电话礼仪,而电工必须接受危险安全培训)。我希望能够生成一份报告,显示每个人所需的所有培训,以及完成的培训课程的完成日期。 模式I有以下表格: 人员——列出员工信息,例如姓名、电话、电子邮件;键: 我创建了一个查询来匹配到他们当前的: 这是正确的,并告诉我每个人当前的培
问题内容: 下面是一个简单的Java程序。它具有一个称为“ cnt”的计数器,该计数器递增,然后添加到名为“ monitor”的列表中。“ cnt”由多个线程递增,并且值由多个线程添加到“ monitor”。 在方法“ go()”的末尾,cnt和monitor.size()应该具有相同的值,但它们没有相同的值。monitor.size()确实具有正确的值。 如果通过取消注释已注释的同步块之一并注释