- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
索引:
{
"settings": {
"index.percolator.map_unmapped_fields_as_text": true,
},
"mappings": {
"properties": {
"query": {
"type": "percolator"
}
}
}
}
这个测试过滤器查询有效
{
"query": {
"match": {
"message": "blah"
}
}
}
这个查询不起作用
{
"query": {
"simple_query_string": {
"query": "bl*"
}
}
}
结果:
{"took":15,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":{"value":1,"relation":"eq"},"max_score":0.13076457,"hits":[{"_index":"my-index","_type":"_doc","_id":"1","_score":0.13076457,"_source":{"query":{"match":{"message":"blah"}}},"fields":{"_percolator_document_slot":[0]}}]}}
为什么这个 simple_query_string 查询与文档不匹配?
最佳答案
我也不明白你在问什么。可能是你不是很了解percolator?这是我刚刚试过的一个例子。
假设您有一个索引 - 我们称之为 test
- 您希望在其中索引一些文档。该索引具有以下映射(只是我测试设置中的随机测试索引):
{
"settings": {
"analysis": {
"filter": {
"email": {
"type": "pattern_capture",
"preserve_original": true,
"patterns": [
"([^@]+)",
"(\\p{L}+)",
"(\\d+)",
"@(.+)",
"([^-@]+)"
]
}
},
"analyzer": {
"email": {
"tokenizer": "uax_url_email",
"filter": [
"email",
"lowercase",
"unique"
]
}
}
}
},
"mappings": {
"properties": {
"code": {
"type": "long"
},
"date": {
"type": "date"
},
"part": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"val": {
"type": "long"
},
"email": {
"type": "text",
"analyzer": "email"
}
}
}
}
您注意到它有一个自定义的 email
分析器,可以将类似 foo@bar.com
的内容拆分为这些标记:foo@bar.com
, foo
, bar.com
, bar
, com
.
如文档所述,您可以创建一个单独的过滤器索引,它只包含您的过滤器查询,而不是文档本身。而且,即使过滤器索引不包含文档本身,它也应该保存应该保存文档的索引的映射(在我们的例子中是 test
)。
这是过滤器索引(我称之为 percolator_index
)的映射,它还有用于拆分 email
字段的特殊分析器:
{
"settings": {
"analysis": {
"filter": {
"email": {
"type": "pattern_capture",
"preserve_original": true,
"patterns": [
"([^@]+)",
"(\\p{L}+)",
"(\\d+)",
"@(.+)",
"([^-@]+)"
]
}
},
"analyzer": {
"email": {
"tokenizer": "uax_url_email",
"filter": [
"email",
"lowercase",
"unique"
]
}
}
}
},
"mappings": {
"properties": {
"query": {
"type": "percolator"
},
"code": {
"type": "long"
},
"date": {
"type": "date"
},
"part": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"val": {
"type": "long"
},
"email": {
"type": "text",
"analyzer": "email"
}
}
}
}
它的映射和设置与我的原始索引几乎相同,唯一的区别是添加到映射中的附加 query
字段是 percolator
类型。
您感兴趣的查询 - simple_query_string
- 应该进入 percolator_index
内的文档。像这样:
PUT /percolator_index/_doc/1?refresh
{
"query": {
"simple_query_string" : {
"query" : "month foo@bar.com",
"fields": ["part", "email"]
}
}
}
为了让它更有趣,我在其中添加了 email
字段,以便在查询中专门搜索(默认情况下,所有这些都被搜索)。
现在,目标是针对来自您的过滤器索引的此 simple_query_string
查询来测试最终应进入 test
索引的文档。例如:
GET /percolator_index/_search
{
"query": {
"percolate": {
"field": "query",
"document": {
"date":"2004-07-31T11:57:52.000Z","part":"month","code":109,"val":0,"email":"foo@bar.com"
}
}
}
}
document
下的内容显然是您 future (尚不存在)的文档。这将与上面定义的 simple_query_string
相匹配,并将产生匹配:
{
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.39324823,
"hits": [
{
"_index": "percolator_index",
"_type": "_doc",
"_id": "1",
"_score": 0.39324823,
"_source": {
"query": {
"simple_query_string": {
"query": "month foo@bar.com",
"fields": [
"part",
"email"
]
}
}
},
"fields": {
"_percolator_document_slot": [
0
]
}
}
]
}
}
如果我改为过滤此文档会怎样:
{
"query": {
"percolate": {
"field": "query",
"document": {
"date":"2004-07-31T11:57:52.000Z","part":"month","code":109,"val":0,"email":"foo"
}
}
}
}
(注意电子邮件只是foo
)这是结果:
{
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.26152915,
"hits": [
{
"_index": "percolator_index",
"_type": "_doc",
"_id": "1",
"_score": 0.26152915,
"_source": {
"query": {
"simple_query_string": {
"query": "month foo@bar.com",
"fields": [
"part",
"email"
]
}
}
},
"fields": {
"_percolator_document_slot": [
0
]
}
}
]
}
}
请注意,分数比第一个渗透文档要低一些。这可能是因为 foo
(我的电子邮件)仅匹配我分析的 foo@bar.com
中的一个术语,而 foo@bar.com
会匹配所有这些(从而给出更好的分数)
虽然不确定您在说什么分析仪。我认为上面的例子涵盖了我认为可能有点困惑的唯一“分析器”问题/未知。
关于elasticsearch - 如何渗透 simple_query_string/query_string 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58651658/
我确定这已经被问过无数次了,但我无法让它发挥作用, 我正在尝试用查询字符串重写一个 url,我的 url 是例如: http://example.com/articles/index.php?keyw
如果我要创建这样的查询: "query": { "query_string": { "query": "User:mjohnst", "default_field": "Text"
我在ES 5中具有以下映射的索引 { "test-log": { "mappings": { "record": { "properties": {
我的数据库与 Elasticsearch 同步,以优化我们的搜索结果并更快地请求。 我在查询用户时遇到问题,我想通过查询来查找我的用户,它可以是姓名、电话、IP、... 我的实际查询是 query_s
这是我的测试: 使用比赛 {“query”:{“bool”:{“must”:[{“match”:{“name”:{“query”:“ka”}}}},{“term”:{“kind”:“k1 “}}]}}
我在ElasticSearch(我正在使用1.6版)应用程序中有以下查询: { "query":{ "span_multi":{ "match":{
我正在尝试在 Elasticsearch 中使用日期数学进行日期范围查询,但它没有返回任何结果: `query: { bool: { must: { q
我有一个页面显示我的数据库中的数据。在用户看到数据之前,他们有几个选择框,因此他们可以选择以多种不同方式过滤数据,例如选择显示特定时间段内的数据。当我使用 get 方法时,url 看起来类似于下面的内
我有一个包含 field 视频的索引,其值为 1.flv。如果我执行以下查询: "query": { "query_string": { "query": "2.flv"
我正在使用 ElasticSearch (2.4) 和官方 Python 客户端执行简单查询。我的代码: from elasticsearch import Elasticsearch es_clie
当我将表单数据发布到我的服务器时,我的 fastcgi 应用程序能够从 nginx 读取除 QUERY_STRING 之外的所有参数。查看 CONTENT_LENGTH 给出了正确的字符串长度,我的浏
关于 SO 的第一个问题! 我在 apache 2.2.22 上运行 PHP 5.3.10。我只是这样做: Apache 的 error.log 中的输出如下: Array ( [HTTP_
我有一个关于 .htaccess 和 QUERY_STRING 的问题。 我尝试使用我的 htaccess 重定向一个 URL,如下所示: http://mydomain.tld/out/http%3
您好,我有一个奇怪的问题:我的任务是将 WP 页面 (page_id=2) 重定向到同一域上的页面 (about),但是当我使用字符串重定向时: RewriteEngine On RewriteCon
我在这里遇到一个奇怪的问题。我正在将一个(工作)站点移动到一个我无法直接访问的新 apache 服务器(我必须通过两个人才能完成工作)。 该站点使用名为 adframe 的 perl 脚本来解析 ht
假设我有一个索引,并使用以下语句添加了一些文档: POST test/item/_bulk {"id": 1, "text": "one two"} {"id": 2, "text": "one tw
在我的Elasticsearch中,我有一个像这样的文档: "field_4" : [ "ip_address", "127.0.0
我需要的是,elastic 应该在 中搜索多个字段并按字段优先级返回数据。 例如:对于搜索字符串 obil hon , elastic 应该在 fields[title, description, m
我试图得到一个大于 X 且字段等于 Y 的结果。我试过这个: { "sort": { "datapublicacao": "desc" }, "query": {
我想从 query_string 中读取数据。 例如: username=kramsp&password=overfloww123 我想从查询字符串中读取值 query= username=[data
我是一名优秀的程序员,十分优秀!