Elasticsearch在单词开头的multi_match

时间:2016-09-15 12:00:43

标签: elasticsearch

我有一点问题,我开始使用Elasticsearch并在使用我的curl脚本测试时出现此问题。

curl -XGET 'localhost:9200/fcomputer/products/_search?pretty' -d'
{
    "query" : {
        "multi_match" : {
            "query" : "sams evo",
"fields": ["title", "fulltext"]
        }
    }
}'

我尝试在其中包含所有内容或以sams和evo开头后进行搜索,我不关心区分大小写。

现在,当我输入并且在sams和evo上使用一种“或”时,它看起来像是正确的单词。

有一种简单的方式可以对查询说:

  1. 在字段中搜索:标题和全文

  2. 如果您在字段中找到某些内容,则(开始)或(100%匹配)后两个单词(sams& evo)匹配

  3. 在搜索中返回所有有效数据。

  4. 我一直试图在这个标题上找到匹配:

    • Samsung 950 PRO MZ-V5P256BW - 固态硬盘 - 256 GB - PCI Express 3.0 x4(NVMe

    • 华硕GTX950-2G grafikkort - GF GTX 950 - 2 G

    • 华硕GTX950-OC-2GD5 grafikkort - GF GTX 950 - 2 GB

    • Zebra Z-Ultimate 5A - permanentklæbendeblank polyestertape - 950 stk。

    • Kyocera TK 950 - sort - original - tonerpatron

    如果我使用搜索词“Samsung 950”,这里关闭的唯一匹配是(Samsung 950 PRO),但它不起作用。

1 个答案:

答案 0 :(得分:1)

试试这个

{
  "query": {
    "multi_match": {
      "query": "sam evo",
      "type": "cross_fields",
      "operator": "and",
      "fields": [
        "title",
        "fulltext"
      ]
    }
  }
}

使用此设置

{
    "settings": {
        "analysis": {
            "filter": {
                "autocomplete_filter": { 
                    "type":     "edge_ngram",
                    "min_gram": 1,
                    "max_gram": 20
                }
            },
            "analyzer": {
                "autocomplete": {
                    "type":      "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "autocomplete_filter" 
                    ]
                }
            }
        }
    }
}

和映射

{
  "properties": {
    "title": {
      "type": "string",
      "analyzer": "autocomplete",
      "search_analyzer": "standard"
    },
    "fulltext": {
      "type": "string",
      "analyzer": "autocomplete",
      "search_analyzer": "standard"
    }
  }
}