elasticsearch 通行证-&引用;在弹性搜索查询中,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 通行证-&引用;在弹性搜索查询中,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 通行证-&引用;在弹性搜索查询中

elasticsearch 通行证-&引用;在弹性搜索查询中,elasticsearch,lucene,elasticsearch,Lucene,当我们传递一个包含特殊字符的查询时,弹性搜索就是拆分文本。 例如,如果我们通过了查询中的“测试”,我们如何进行弹性搜索,将其视为单个单词而不是拆分 我们正在搜索的字段上使用的分析器: "text_search_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 15 }, "standard_stop_filter": { "type":

当我们传递一个包含特殊字符的查询时,弹性搜索就是拆分文本。 例如,如果我们通过了查询中的“测试”,我们如何进行弹性搜索,将其视为单个单词而不是拆分

我们正在搜索的字段上使用的分析器:

"text_search_filter": {
        "type":     "edge_ngram",
        "min_gram": 1,
        "max_gram": 15
     },
     "standard_stop_filter": {
       "type":       "stop",
       "stopwords":  "_english_"
     }
   },

   "analyzer": {

     "text_search_analyzer": {
        "type": "custom",
        "tokenizer": "whitespace",
        "filter": [
           "lowercase",
           "asciifolding",
           "text_search_filter"
        ]
     }
}

此外,还可以使用以下查询进行搜索:

"query": {
    "multi_match": {
      "query": "test-test",
      "type": "cross_fields",
      "fields": [
        "FIELD_NAME"
      ],

    }
  }


{
"tokens": [
    {
        "token": "'",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'t",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'te",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'tes",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test-",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test-t",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test-te",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test-tes",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test-test",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    },
    {
        "token": "'test-test'",
        "start_offset": 0,
        "end_offset": 11,
        "type": "word",
        "position": 1
    }
]

}

在我的代码中,我捕获了所有包含“-”的单词,并为其添加了引号

例如: 乔·多伊->“乔·多伊”

这方面的java代码:

    static String placeWordsWithDashInQuote(String value) {
    return Arrays.stream(value.split("\\s"))
        .filter(v -> !v.isEmpty())
        .map(v -> v.contains("-") && !v.startsWith("\"") ? "\"" + v + "\"" : v)
        .collect(Collectors.joining(" "));
}
在这个示例之后,查询如下所示:

{
"query": {
    "bool": {
        "must": [
            {
                "query_string": {
                    "fields": [
                        "lastName",
                        "firstName"
                    ],
                    "query": "\"joe-doe\"",
                    "default_operator": "AND"
                }
            }
        ]
    }
},
"sort": [],
"from": 0,
"size": 10 }

在我的代码中,我捕获所有包含“-”的单词,并为其添加引号

例如: 乔·多伊->“乔·多伊”

这方面的java代码:

    static String placeWordsWithDashInQuote(String value) {
    return Arrays.stream(value.split("\\s"))
        .filter(v -> !v.isEmpty())
        .map(v -> v.contains("-") && !v.startsWith("\"") ? "\"" + v + "\"" : v)
        .collect(Collectors.joining(" "));
}
在这个示例之后,查询如下所示:

{
"query": {
    "bool": {
        "must": [
            {
                "query_string": {
                    "fields": [
                        "lastName",
                        "firstName"
                    ],
                    "query": "\"joe-doe\"",
                    "default_operator": "AND"
                }
            }
        ]
    }
},
"sort": [],
"from": 0,
"size": 10 }

您的用例是什么?您的
映射是什么?
?因为有不同的方法来实现这一点,使用Analyzer更新并查询搜索。我们可以看到使用分析器创建了一个标记“test test”。curl-XGET'localhost:9200/your\u index\u name/\u analyze?analyzer=test\u search\u analyzer'-d'test test test'您在输出中看到标记“test test”了吗?您确定要搜索的所有字段都应用了test\u search\u分析器吗?因为test是一个令牌,它应该匹配。您没有使用不同的
search\u analyzer
对吗?您的用例是什么?您的
映射是什么?
?因为有不同的方法来实现这一点,使用Analyzer更新并查询搜索。我们可以看到使用分析器创建了一个标记“test test”。curl-XGET'localhost:9200/your\u index\u name/\u analyze?analyzer=test\u search\u analyzer'-d'test test test'您在输出中看到标记“test test”了吗?您确定要搜索的所有字段都应用了test\u search\u分析器吗?因为test是一个令牌,它应该匹配。您没有使用不同的
search\u分析器
对吗?