我希望能够使用一些特殊字符和术语在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"
}
}
}
我当前正在使用标准 token 生成器,但无法查询特殊字符,它不返回任何文档。
是否已经为此类任务定义了分词器?我考虑过不分析该 Realm ,但不会有小写部分。
编辑:
我创建了一个自定义分析器:
{
"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": ";"
}
}
}
但我仍然没有任何结果。我尝试看看 token 生成器到底做了什么:
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
}
]
}
当 token 生成器似乎正常工作时,为什么不能检索任何文档?
最佳答案
您必须使用自定义分析器来执行所需的标记化。
我想提供一个示例-但 flex 论坛中的此帖子提供了详细的答案。
https://discuss.elastic.co/t/how-to-index-special-characters-and-search-those-special-characters-in-elasticsearch/42506/2
关于elasticsearch - Elasticsearch:使用哪个分析器通过一些特殊字符搜索文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43764415/