gpt4 book ai didi

elasticsearch - 如何使用elasticsearch进行包含/喜欢查询?

转载 作者:行者123 更新时间:2023-12-02 22:28:21 26 4
gpt4 key购买 nike

我想用 eleasticsearch 实现下面的 tsql 查询

declare @searchstring nvarchar (max) 

set @searchstring = 'tn-241'

set @searchstring = replace(replace('%'+@searchstring+'%', '-', ''), ' ', '')

SELECT *
FROM [dbo].[Product]
where
replace(replace(shortdescription, '-', ''), ' ', '') like @searchstring or
replace(replace(name, '-', ''), ' ', '') like @searchstring or
replace(replace(number, '-', ''), ' ', '') like @searchstring

为此,我使用关键字标记器和定界符过滤器和 catenate_all 创建了分析器,如下所示
"search_delimiter": {
"split_on_numerics": "false",
"generate_word_parts": "false",
"preserve_original": "false",
"generate_number_parts": "false",
"catenate_all": "true",
"split_on_case_change": "false",
"type": "word_delimiter",
"stem_english_possessive": "false"
}
"analyzer": {
"searchanalyzer": {
"filter": [
"lowercase"
,
"search_delimiter"
],
"type": "custom",
"tokenizer": "keyword"


},
"Name": {
"analyzer": "searchanalyzer",
"type": "string",
"fields": {
"raw": {
"analyzer": "searchanalyzer",
"type": "string"
}
}
},
"Number": {
"analyzer": "searchanalyzer",
"type": "string",
"fields": {
"raw": {
"analyzer": "searchanalyzer",
"type": "string"
}
}
}
"ShortDescription": {
"analyzer": "searchanalyzer",
"type": "string",
"fields": {
"raw": {
"analyzer": "searchanalyzer",
"type": "string"
}
}
},

结果为
curl -XGET "Index/_analyze?analyzer=searchanalyzer&pretty=true" -d "Original Brother TN-241C Toner Cyan"
{
"tokens" : [ {
"token" : "originalbrothertn241ctonercyan",
"start_offset" : 0,
"end_offset" : 35,
"type" : "word",
"position" : 0
} ]
}
}

所以我需要基本上应用相同的分析器并使用应该进行字符串搜索的 query_string 或通配符搜索

所以如果我像下面这样搜索
"query": {
"query_string" : {
"fields" : ["Name", "Number", "ShortDescription"],
"query" : "*TonerCyan*"
}
}

它工作正常,但如果我搜索
  "query": {
"query_string" : {
"fields" : ["Name", "Number", "ShortDescription"],
"query" : "*Toner Cyan*"
}
}

它不会返回任何结果,这意味着在执行 query_string 之前没有应用 searchanalyzer,因为我希望它也应该在第二个查询中搜索 TonerCyan 而不是分别搜索 Toner 和 Cyan?第一个问题是为什么这不起作用? 2nd是实现上面tsql查询的最佳方法是什么?它应该搜索多个字段

最佳答案

您可以尝试将搜索字符串放在这样的双引号内,并且应该可以工作:

{
"query": {
"query_string": {
"fields": [
"Name",
"Number",
"ShortDescription"
],
"query": "*\"Toner Cyan\"*"
}
}
}

此外,您应该知道搜索前缀通配符可能会对性能产生灾难性影响,具体取决于您拥有的数据量。我仍然相信你应该因为这个原因索引 ngrams。

关于elasticsearch - 如何使用elasticsearch进行包含/喜欢查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com