我正在使用Elastic Search 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}}
}
}
在
synonym.txt
中是this, that, money => sainai
在
stopwords.csv
中是hello
how
are
you
第一个得到(“嬉皮”)返回空
只有第二个get('this is')返回结果
问题是什么?似乎在第一个查询中过滤了停用词“this is”,但是我是否明确指定了停用词?
最佳答案
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
关于elasticsearch - Elasticsearch 中不需要的停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49142179/