我正在寻找一个单词“修改”,它可能在数据中以“修改”,“修改”甚至“ *修改”出现。搜寻这些单词的最佳方法是什么?我知道通配符可以实现此目的,但是由于代码的其他部分,我被限制为不使用它。提供更好的搜索性能的方法有哪些?
答案 0 :(得分:0)
您可以使用elasticsearch的 query_string 功能来实现此目的。假设您使用默认的standard analyzer
。
{
"query":{
"query_string":{
"default_field":"Customer",
"query":"*Jo*"
}
}
}
您可以添加多个字段,如下面的查询所示
{
"query":{
"query_string":{
"fields":[
"Customer",
"Name"
],
"query":"*Jo*"
}
}
}
答案 1 :(得分:0)
有多种方法:
如前所述,您不能使用通配符,然后输入query_string
{
"query":{
"query_string":{
"default_field":"text",
"query":"*amend"
}
}
}
第二,您可以使用n-gram标记器。您可以在这里https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html
进行检查这会将您的值“修改”破坏为[[ame],“ men”,“ end” ...等]
一旦完成了应用n-gram代币检查的工作,就开始为数据编制索引。
您可以如下查询:
{"query":{"term":{"text":"amend"}}}
您将获得输出结果。
答案 2 :(得分:0)
您用术语“修改”,“修改”和“修改”描述的内容称为关键字词干。您可以在弹性索引设置中添加stemmer token filter。
例如:
PUT /my_index
{
"settings": {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "my_stemmer"]
}
},
"filter" : {
"my_stemmer" : {
"type" : "stemmer",
"name" : "english"
}
}
}
}
}
使用此词干提取器会将[amend, amending, amendment]
项索引为[amend, amend, amend]
。
然后您可以进行match
查询,它应该返回您想要的内容。