Elasticsearch同义词区分大小写

cgvd09ve  于 2023-06-05  发布在  ElasticSearch
关注(0)|答案(2)|浏览(338)

我想使用ES7的同义词。
我有:
同义词:angularjs,angular.js,angular js
我的期望:
查询:angularjs angular.js
查询2:Angularjs匹配:angular.js
问题:
查询:angularjs angular.js
查询2:Angularjs匹配:0命中
我用过滤器

filter:
              synonym:
                type: synonym
                #ignore_case: true
                lenient: true
                synonyms_path: synonym.txt

我有一个分析器:

synonym_analyzer:
                tokenizer: 'standard'
                ignore_case: true
                filter: [ lowercase, trim, asciifolding, elision, synonym ]

为什么我的查询中有大写字母或没有大写字母会有不同的结果?如果我的查询没有同义词,它可以完美地工作。
我如何调试它?

zf9nrax1

zf9nrax11#

我的建议适用于查询angularjs和Angularjs的匹配angular.js:
Map

PUT idx_synonyms
{
  "mappings": {
    "properties": {
      "language": {
        "type": "text",
        "analyzer": "standard",
        "search_analyzer": "synonym"
      }
    }
  },
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "synonym": {
            "tokenizer": "standard",
            "filter": [
              "lowercase",
              "trim",
              "asciifolding",
              "elision",
              "synonym"
            ]
          }
        },
        "filter": {
          "synonym": {
            "type": "synonym",
            "synonyms": [
              "angularjs, angular.js, angular js"
            ]
          }
        }
      }
    }
  }
}

数据

POST idx_synonyms/_doc
{
  "language": "angular.js"
}

查询:

GET idx_synonyms/_search
{
  "query": {
    "match": {
      "language": {
        "query": "angularjs"
      }
    }
  }
}
sg24os4d

sg24os4d2#

我遇到了同样的问题,我使用两个分析仪每个字段
第一个分析仪是search_analyzer,第二个分析仪是analyzer
当您发送搜索请求时,第一个分析器将使您的搜索模式小写,并检查您的同义词表。

举个例子:

PUT test_index_with_two_analyzer
{
  "mappings": {
    "properties": {
      "productname": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        },
        "analyzer": "word_delimiter_graph",
        "search_analyzer": "synonym_analyzer"
      }
    }
  },
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "synonym": {
            "type": "synonym",
            "synonyms_path": "synonyms.txt"
          },
          "autocomplete_filter": {
            "type": "edge_ngram",
            "min_gram": "2",
            "max_gram": "20"
          }
        },
        "analyzer": {
          "synonym_analyzer": {
            "filter": [
              "lowercase",
              "synonym"
            ],
            "tokenizer": "whitespace"
          },
          "word_delimiter_graph": {
            "filter": [
              "word_delimiter_graph",
              "lowercase"
            ],
            "tokenizer": "keyword"
          },
          "autocomplete_analyzer": {
            "filter": [
              "lowercase",
              "kstem",
              "word_delimiter_graph",
              "autocomplete_filter"
            ],
            "type": "custom",
            "tokenizer": "standard"
          }
        }
      }
    }
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html

相关问题