请考虑以下文件:
{
"Title": "Western Europe"
}
我想针对标题字段
运行此类搜索查询我可以运行一个简单的匹配查询:
POST /_search
{
"query": {
"match": {
"Title": "Apple in Western Europe"
}
}
}
无论我使用哪个搜索短语,它都会不经意地匹配并将其恢复。但是,我想提出一个查询,只有当标题字段短语匹配我的搜索查询时才能恢复我的文档。那可能吗?还有其他参数吗?这似乎是phrase matching的反面案例。
如果没有,我应该考虑用带状疱疹重建索引数据吗?
所以在这个场景中运行这个(带有附加参数)不会得分并带回我的文档。
POST /_search
{
"query": {
"match": {
"Title": "Apple in Eastern Europe"
}
}
}
TL;博士
如果我的搜索查询中存在所有字段(我正在搜索的字段)令牌,如何编写将带回文档的查询? 例如,我的文档字段仅包含这两个标记:
如果我的搜索短语是,例如 Lorem ipsum dolor sit amet,consectetur adipiscing elit abc xyz ,文档带回来。
如果它是 Lorem ipsum dolor坐下来,这是 xyz ,那就是没有带回来。
答案 0 :(得分:1)
您可以使用过滤器查询(ES Documentation):
query
:接受具有所有强大功能的ES查询Title
:元数据(可选)PUT /my_index
{
"mappings": {
"properties": {
"Title": {
"type": "text"
},
"query": {
"type": "percolator"
}
}
}
}
PUT /my_index/_doc/1
{
"query": {
"match_phrase": {
"Title": "Western Europe"
}
},
"Title": "Western Europe"
}
POST /my_index/_search
{
"query": {
"percolate": {
"field": "query",
"document": {
"Title": "Apple in Western Europe"
}
}
}
}
答案 1 :(得分:0)
尝试使用具有不同参数的“间隔查询”,这些参数可以为您提供帮助。
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html
答案 2 :(得分:0)
我知道Stefan在评论中给出了一个简单而有效的解决方案,但是您可能还想将Span Queries看作是仅供参考!
我已经创建了示例映射,文档,查询和响应:
PUT my_span_index
{
"mappings": {
"properties": {
"Title":{
"type": "text"
}
}
}
}
POST my_span_index/_doc/1
{
"Title": "Western Europe"
}
POST my_span_index/_doc/2
{
"Title": "Eastern Europe"
}
//slop - distance between words Western and Europe here is 13
POST my_span_index/_doc/3
{
"Title": "As far as Western culture is America, we see gradually more and more of the same in Europe"
}
POST my_span_index/_search
{
"query": {
"span_near" : {
"clauses" : [
{ "span_term" : { "Title": "western" } },
{ "span_term" : { "Title": "europe" } }
],
"slop" : 12, <---- Distance Between Words
"in_order" : true <---- If order is important
}
}
}
请注意,我使用了Span Near和Span Term Query并注意了上面的注释。
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.5420371,
"hits" : [
{
"_index" : "my_span_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.5420371,
"_source" : {
"Title" : "Western Europe"
}
},
{
"_index" : "my_span_index",
"_type" : "_doc",
"_id" : "3",
"_score" : 0.028773852,
"_source" : {
"Title" : "As far as Western culture is America, we see gradually more and more of the same in Europe"
}
}
]
}
}
请注意,在响应中还会返回具有id:3
的文档,但是,如果将斜率更改为较小的值,则不会出现。
痛苦的是,如果您的请求要有更多的令牌,您最终将在应用程序端编写/生成长查询。
希望我能帮上忙!