我试图用撇号找到包含单词的句子。所以,在文中
如果你问外国人一些典型的英国菜,他们 可能会说鱼和薯条然后停下来。令人失望的是, 但事实是,英国没有吃饭的传统 餐馆,因为我们的食物不适合这种准备。 英国的烹饪是在家里找到的,在那里可以计时 菜肴要完美。所以很难找到一个好的英语 价格合理的餐厅
我试着找
发现这是令人失望的,但事实是,没有传统 英国人在餐馆吃饭,因为我们的食物没有。
我创建了查询
{
"_index": "liza_index",
"_type": ".percolator",
"_id": "1594",
"_version": 37,
"found": true,
"_source": {
"query": {
"bool": {
"minimum_should_match": 1,
"should": {
"span_or": {
"clauses": [{
"span_near": {
"in_order": true,
"clauses": [{
"span_multi": {
"match": {
"regexp": {
"message": "it"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "is"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "disappointing"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "but"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "true"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "that"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "there"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "is"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "no"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "tradition"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "in"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "britain"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "of"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "eating"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "in"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "restaurants"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "because"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "our"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "food"
}
}
}
}, {
"span_multi": {
"match": {
"regexp": {
"message": "doesn't"
}
}
}
}],
"slop": 0,
"collect_payloads": false
}
}]
}
}
}
}
}}
但是Elastic没有找到它。没有“不”,查询就可以工作。
我试图在撇号之前添加反斜杠 - “没有”无效,所以我做了“没有”和“没有”。但它不起作用。
顺便说一句,我创建了一个带有反斜杠并且没有
的单词“不”的查询{
"_index": "liza_index",
"_type": ".percolator",
"_id": "2101",
"_version": 31,
"found": true,
"_source": {
"query": {
"bool": {
"minimum_should_match": 1,
"should": {
"span_or": {
"clauses": [{
"span_multi": {
"match": {
"regexp": {
"message": "doesn't"
}
}
}
}]
}
}
}
}
}}
它也不起作用。同时以下查询工作
curl -XPUT 'localhost:9200/liza_index/.percolator/1' -d '{"query" : {"match" : {"message" : "doesn't"}}}'
和
curl -XPUT 'localhost:9200/liza_index/.percolator/1' -d '{"query" : {"match" : {"message" : "doesn\\'t"}}}'
问题是:如何用撇号找到这个词?我应该使用第一个查询的结构创建什么样的查询?
答案 0 :(得分:0)
“最难的是在黑暗的房间里找到一只黑猫, 特别是如果没有猫。“
- 孔子
Elasticsearch执行收到的standard analysis and curation数据。它删除了大多数标点符号。如果您使用匹配查询,您将通过相同的策展流程传递您的查询,它将起作用(将删除查询中的所有标点符号)。 Regexp查询不是策划的。这就是为什么它找不到撇号。
您可以使用 match_phrase
而不是生成复杂的正则表达式查询curl -XPOST "http://esarchive.local:9200/liza_index/.percolator/_search" -d'
{
"query": {
"match_phrase": {
"message": "find it is disappointing, but true, that there is no tradition in britain of eating in restaurants, because our food doesn\"t"
}
}
}'
或创建自定义分析器/映射器以保留标点符号