我有一堆像下面这样的文件。我想过滤projectkey以~开头的数据。我确实读过一些文章,其中说~是弹性查询中的一个运算符,因此无法真正使用它进行过滤。有人能帮你建立搜索查询/branch/u搜索API吗??
{
"_index": "branch",
"_type": "_doc",
"_id": "GAz-inQBJWWbwa_v-l9e",
"_version": 1,
"_score": null,
"_source": {
"branchID": "refs/heads/feature/12345",
"displayID": "feature/12345",
"date": "2020-09-14T05:03:20.137Z",
"projectKey": "~user",
"repoKey": "deploy",
"isDefaultBranch": false,
"eventStatus": "CREATED",
"user": "user"
},
"fields": {
"date": [
"2020-09-14T05:03:20.137Z"
]
},
"highlight": {
"projectKey": [
"~@kibana-highlighted-field@user@/kibana-highlighted-field@"
],
"projectKey.keyword": [
"@kibana-highlighted-field@~user@/kibana-highlighted-field@"
],
"user": [
"@kibana-highlighted-field@user@/kibana-highlighted-field@"
]
},
"sort": [
1600059800137
]
}
更新***
我在下面使用prerana的答案在我的查询中使用-prefix
当我使用前缀和范围时仍然有问题-我得到以下错误-我缺少什么??
GET /branch/_search
{
"query": {
"prefix": {
"projectKey": "~"
},
"range": {
"date": {
"gte": "2020-09-14",
"lte": "2020-09-14"
}
}
}
}
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "[prefix] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 6,
"col": 5
}
],
"type": "parsing_exception",
"reason": "[prefix] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 6,
"col": 5
},
"status": 400
}
虽然@hansley答案可以工作,但它需要您创建一个自定义分析器,并且仍然如您所提到的,您只想获取以~
开头的文档,但在他的结果中,我看到了所有包含~
的文档,因此提供我的答案,它需要非常少的配置并按要求工作。
索引映射默认值,因此只需在docs和ES下面建立索引,即可创建带有的默认映射。所有文本的关键字字段
索引样本文档
{
"title" : "content1 ~"
}
{
"title" : "~ staring with"
}
{
"title" : "in between ~ with"
}
搜索查询应该从示例文档中获取第二个文档
{
"query": {
"prefix" : { "title.keyword" : "~" }
}
}
和搜索结果
"hits": [
{
"_index": "pre",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"title": "~ staring with"
}
}
]
有关详细信息,请参阅前缀查询
更新1:
索引映射:
{
"mappings": {
"properties": {
"date": {
"type": "date"
}
}
}
}
指数数据:
{
"date": "2015-02-01",
"title" : "in between ~ with"
}
{
"date": "2015-01-01",
"title": "content1 ~"
}
{
"date": "2015-02-01",
"title" : "~ staring with"
}
{
"date": "2015-02-01",
"title" : "~ in between with"
}
搜索查询:
{
"query": {
"bool": {
"must": [
{
"prefix": {
"title.keyword": "~"
}
},
{
"range": {
"date": {
"lte": "2015-02-05",
"gte": "2015-01-11"
}
}
}
]
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_63924930",
"_type": "_doc",
"_id": "2",
"_score": 2.0,
"_source": {
"date": "2015-02-01",
"title": "~ staring with"
}
},
{
"_index": "stof_63924930",
"_type": "_doc",
"_id": "4",
"_score": 2.0,
"_source": {
"date": "2015-02-01",
"title": "~ in between with"
}
}
]
如果我很理解你的问题,我建议创建一个自定义分析器来搜索特殊字符。
我在将~
替换为\uuu SPECIAL\uu时进行了如下本地测试:
我用一个自定义的char_过滤器创建了一个索引,并在projectKey字段中添加了一个字段。新multi_字段的名称为特殊_字符。
以下是映射:
PUT wildcard-index
{
"settings": {
"analysis": {
"char_filter": {
"special-characters-replacement": {
"type": "mapping",
"mappings": [
"~ => __SPECIAL__"
]
}
},
"analyzer": {
"special-characters-analyzer": {
"tokenizer": "standard",
"char_filter": [
"special-characters-replacement"
]
}
}
}
},
"mappings": {
"properties": {
"projectKey": {
"type": "text",
"fields": {
"special_characters": {
"type": "text",
"analyzer": "special-characters-analyzer"
}
}
}
}
}
}
然后我在索引中摄取了以下内容:
“projectKey”:“content1 ~”
“projectKey”:“这是一个内容”
“projectKey”:“~路上的汽车”
“projectKey”:“o ngram”
然后,查询是:
GET wildcard-index/_search
{
"query": {
"match": {
"projectKey.special_characters": "~"
}
}
}
答复是:
"hits" : [
{
"_index" : "wildcard-index",
"_type" : "_doc",
"_id" : "h1hKmHQBowpsxTkFD9IR",
"_score" : 0.43250346,
"_source" : {
"projectKey" : "content1 ~"
}
},
{
"_index" : "wildcard-index",
"_type" : "_doc",
"_id" : "iFhKmHQBowpsxTkFFNL5",
"_score" : 0.3034693,
"_source" : {
"projectKey" : "This ~ is a content"
}
},
{
"_index" : "wildcard-index",
"_type" : "_doc",
"_id" : "-lhKmHQBowpsxTkFG9Kg",
"_score" : 0.3034693,
"_source" : {
"projectKey" : "~ cars on the road"
}
}
]
如果您有任何问题,请告诉我,我将很乐意为您提供帮助。
注意:如果
~
后面有空格,则此方法有效。从响应中可以看出,没有显示第4个数据。
我有一份这样的文件 下面是我到目前为止所尝试的
作为参考,我使用的是Elasticsearch 6.4.0 我有一个Elasticsearch查询,它返回一定的命中视频数,我正在尝试删除文本字段值过于相似的命中。我的查询是: 此查询使用自定义函数分数和筛选器来返回用户可能喜欢的书籍(他们尚未创作的书籍)。对于某些人来说,它返回的名字非常相似的书(即乔治·华盛顿的一生,乔治·华盛顿的美好时光,谁是乔治·华盛顿),我希望热门歌曲有一套更多样化的名字
我使用的是ES版本5.6。我有一个像下面这样的文档存储在ES中。 我想搜索所有已“启用”的字段。 我尝试了以下查询,但都不起作用。 但是下面的查询起作用了 因此,看起来只匹配顶级字段,而不匹配嵌套字段。是否有任何方法可以查询包含在所有字段中的文本,包括嵌套字段。我不想显式指定嵌套字段名。我正在寻找一种全局搜索,我想在文档中的任何地方搜索“文本”。 谢了。
我试图使用过滤器聚合来支持前端的多选择方面值。 我有颜色和深度滤镜。 滤色器保存值:黑色(5)、蓝色(3)、红色(2) 深度过滤器保持值:70mm(3)、60mm(5)、50mm(3) 当我在滤色器中选择黑色时,所有其他选项(蓝色,红色)都没有响应。 我尝试添加 谢了,Sree。
我正在使用以下搜索: 我现在想使用弹性搜索在索引过程中提供的id ()来过滤结果。例如,{}。我猜你得用查询这个词。结果应该是只有当< code>_id匹配时,文档才返回。我该怎么做呢?
我正在尝试在Elastic 2中创建一个过滤索引别名。十、 以下是所有青少年的资料,不分性别。我只想在这个过滤器里看到雌性。 这就是我试图创建索引别名的原因: 我看了这个问题,似乎是相同的答案,但是我的JSON一定有问题。 Elasticsearch将范围和术语连接到相同的数组项