我有一点问题,我开始使用Elasticsearch并在使用我的curl脚本测试时出现此问题。
curl -XGET 'localhost:9200/fcomputer/products/_search?pretty' -d'
{
"query" : {
"multi_match" : {
"query" : "sams evo",
"fields": ["title", "fulltext"]
}
}
}'
我尝试在其中包含所有内容或以sams和evo开头后进行搜索,我不关心区分大小写。
现在,当我输入并且在sams和evo上使用一种“或”时,它看起来像是正确的单词。
有一种简单的方式可以对查询说:
在字段中搜索:标题和全文
如果您在字段中找到某些内容,则(开始)或(100%匹配)后两个单词(sams& evo)匹配
在搜索中返回所有有效数据。
我一直试图在这个标题上找到匹配:
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),但它不起作用。
答案 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"
}
}
}