我希望能够使用一些特殊字符和术语在Elasticsearch上搜索某些文档。例如,如果我有以下文件:
"HEY YOU! Thanks for reading this post!"
我希望能够使用查询字符串,如:
{
"query": {
"query_string": {
"default_field": "content",
"query": "\"!\""
}
}
}
以前一份文件为结果。但我也想通过查询来获取文档:
{
"query": {
"query_string": {
"default_field": "content",
"query": "hey AND you"
}
}
}
我目前正在使用标准广告代码,但我无法查询特殊字符,它不会返回任何文档。 是否已为此类任务定义了一个tokenizer?我认为不分析该领域,但我不会有小写部分。
修改:
我创建了一个自定义分析器:
{
"sw3": {
"settings": {
"index": {
"number_of_shards": "5",
"provided_name": "sw3",
"creation_date": "1493907201172",
"analysis": {
"analyzer": {
"my_analyzer": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "whitespace"
}
}
},
"number_of_replicas": "1",
"uuid": "e0_9cIFrQWqn-zqYeg0q5g",
"version": {
"created": "5030299"
}
}
}
}
}
但是当我尝试时:
{
"query": {
"query_string": {
"default_field": "content",
"query": ";"
}
}
}
我没有得到任何结果。所以我试着这样做:
{
"query": {
"match": {
"content": ";"
}
}
}
但我仍然没有任何结果。我试着看看tokeniser到底做了什么:
GET /my_index/_analyze?analyzer=my_analyzer
{
"text": "Hey ; what's up"
}
查询的结果是:
{
"tokens": [
{
"token": "hey",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": ";",
"start_offset": 4,
"end_offset": 5,
"type": "word",
"position": 1
},
{
"token": "what's",
"start_offset": 6,
"end_offset": 12,
"type": "word",
"position": 2
},
{
"token": "up",
"start_offset": 13,
"end_offset": 15,
"type": "word",
"position": 3
}
]
}
为什么在令牌器工作时我无法检索任何文件?
答案 0 :(得分:1)
您必须使用自定义分析器来执行您需要的标记化。
我很乐意提供一个例子 - 但是弹性论坛中的这篇文章给出了详细的答案。