我有一个集群运行,我遇到了一个问题,涉及到包括特殊字符在我的搜索查询。现在我没有设置Map的索引Map是动态的,分析器也是标准的。有关分析器的信息,我从“分析API”。
>
> GET /<index>/_analyze
> {
> "text": "some-data"
> }
给了我输出
{
"tokens": [
{
"token": "some",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "data",
"start_offset": 5,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 1
}
]
}
我当前的Map
message": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
由于这个输出,我得出结论,这里的分析器是标准的,特殊字符没有索引。现在,当我试图在搜索查询中包含特殊字符时,我没有得到想要的结果,当我试图在搜索查询中使用另一个分析器时,我收到空结果。
现在我的问题是,除了改变Map之外,我有没有其他方法可以在搜索查询中包含特殊字符。
编辑:让我给予你一个例子
假设我在elasticsearch中索引了4个短语
带有some-data的数据
数据与一些数据
资料
一些
现在当我像这样进行搜索查询时
GET index/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "some-data"
}
}
]
}
}
}
我得到了所有的4个句子作为结果。〈----这不是一个期望的输出
我想要的输出是
带有some-data的数据
这是唯一的结果,应该来作为一个击中,但相反,我得到所有的句子作为击中。
现在我也发射了术语查询
GET index/_search
{
"query": {
"term": {
"message.keyword": {
"value": "some-data"
}
}
}
}
这检索到空结果
最接近的一次是我开枪的时候
GET index/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "some-data",
"type": "phrase"
}
}
]
}
}
}
发射时检索到2个结果
数据与一些数据
data with some-data
现在有没有一种方法或查询,我可以发射,使我只收到
data with some-data
作为结果
问候
1条答案
按热度按时间niwlg2el1#
选项是通过Term Level Queries(确切术语)进行搜索,如下所示:message.keyword。但是,您将失去Full Text Queries的功能。要在全文查询中使用特殊字符,例如匹配查询,您需要编辑Map(您可以使用空白分析器)并重新索引(Reindex API建议)。
更新:
如果你不能使用另一个分析器,你可以在关键字字段上使用wildcard。但是你必须假设一些性能问题。
避免以 * 或?开头的模式。这会增加查找匹配项所需的迭代次数,并降低搜索性能。
就像这样: