elasticsearch - Elasticsearch 中不需要的停用词

标签 elasticsearch

我正在使用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/

相关文章:

elasticsearch - 嵌套查询中数组上的聚合

elasticsearch - Elastic Search - 使用 bool 值和 ids 进行 OR 过滤

elasticsearch - 如何在docker-compose中让 “RUN”命令类似于dockerfile?

elasticsearch - 根据数组类型字段的对象数对ElasticSearch进行排序

elasticsearch - Elasticsearch - 搜索期间确实需要 IS “Fetch” 阶段

elasticsearch - Elasticsearch NEST突出显示附件内容

javascript - Elasticsearch NodeJS : How to return result

elasticsearch - Elasticsearch : Match Query not working in Nested Bool Filters

java - ElasticSearch Java 客户端查询嵌套对象

elasticsearch - 在 Elasticsearch 中获取与查询匹配的所有 parent 子女