我正在使用弹性搜索6.这是查询
PUT /semtesttest
{
"settings": {
"index" : {
"analysis" : {
"filter": {
"my_stop": {
"type": "stop",
"stopwords_path": "analysis1/stopwords.csv"
},
"synonym" : {
"type" : "synonym",
"synonyms_path" : "analysis1/synonym.txt"
}
},
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["synonym","my_stop"]
}
}
}
}
},
"mappings": {
"all_questions": {
"dynamic": "strict",
"properties": {
"kbaid":{
"type": "integer"
},
"answer":{
"type": "text"
},
"question": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
PUT /semtesttest/all_questions/1
{
"question":"this is hippie"
}
GET /semtesttest/all_questions/_search
{
"query":{
"fuzzy":{"question":{"value":"hippie","fuzziness":2}}
}
}
GET /semtesttest/all_questions/_search
{
"query":{
"fuzzy":{"question":{"value":"this is","fuzziness":2}}
}
}
<{1>}中的是
synonym.txt
<{1>}中的是
this, that, money => sainai
第一个get(&#39; hippie&#39;)返回空 只有第二次获取(&#39;这是&#39;)返回结果
有什么问题?看起来像停止词&#34;这是&#34;在第一个查询中被过滤,但是我已明确指定了我的停用词?
答案 0 :(得分:0)
fuzzy是一个术语查询。它不会分析输入,因此您的查询正在寻找确切的术语this is
(应用一些模糊的乐趣)。
因此,您要么想要根据这两个术语构建查询,要么使用full text query代替。如果模糊性很重要,我认为唯一的全文查询是match:
GET /semtesttest/all_questions/_search?pretty
{
"query":{
"match":{"question":{"query":"this is","fuzziness":2}}
}
}
如果匹配词组很重要,您可能需要查看此answer并使用span次查询。
这也可能对您有所帮助,因此您可以看到您的分析仪的使用方式:
GET /semtesttest/_analyze?analyzer=my_analyzer&field=question&text=this is