我遇到的问题是搜索除字母数字以外的其他字符。
我尝试过很多分析仪,但认为对于我的问题而言,“空白”是一个很好的选择。分析仪非常适合。
我创建了一个索引custom_doc并发布了一个doc { " body":" ###井号的一些文字#inside", }
但是我无法通过在查询字符串
中传递哈希来找到此文档 {
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": [
"body"
],
"query": "#",
"analyzer": "whitespace"
}
}
]
}
}
}
然而,分析显示它已被正确标记
请求
{
"analyzer": "whitespace",
"text": "#"
}
结果
{
"tokens": [
{
"token": "#",
"start_offset": 0,
"end_offset": 1,
"type": "word",
"position": 0
}
]
}
没有自定义分析器,没有映射,没有其他过滤器。 我该如何解决这个问题?我检查了许多类似的问题而没有改进。有些人建议将该领域作为" not_analyzed"但是我仍然希望有可能在查询字符串中使用通配符,从而改变字段类型来自" text"到"关键字"也不适合我。例如。想要这个查询"所以*"返回发布的文件。
答案 0 :(得分:0)
问题是您还需要在索引时指定whitespace
分析器。仅在搜索时使用它是不够的,因为标准分析器已经删除了#
符号来分析您的文本正文,因此,之后您无法搜索它们。
首先删除索引并使用以下映射重新创建它:
DELETE index
PUT index
{
"mappings": {
"doc": {
"properties": {
"body": {
"type": "text",
"analyzer": "whitespace",
"search_analyzer": "whitespace"
}
}
}
}
}
然后索引你的文件:
PUT index/doc/1
{ "body": "some text with ### hash signs # inside"}
最后,您可以搜索#
符号(请注意,您无需指定whitespace
分析器):
POST index/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": [
"body"
],
"query": "#"
}
}
]
}
}
}