首页 文章

突出与模糊和ngram

提问于
浏览
2

我猜这个主题的 Headers 足以让你失望:D

我使用edge_ngram并突出显示以构建自动完成搜索 . 我在查询中添加了模糊性以允许用户错误地搜索他们的搜索,但它突出了一些亮点 .

当我写 Sport 时,这就是我得到的:

<em>Spor</em>t
<em>Spor</em>t mécanique
<em>Spor</em>t nautique

我想这是因为它与ngram tokenizer生成的令牌 spor 匹配 .

查询:

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "name": {
                            "query": "sport",
                            "operator": "and",
                            "fuzziness": "AUTO"
                        }
                    }
                },
                {
                    "match_phrase_prefix": {
                        "name.raw": {
                            "query": "sport"
                        }
                    }
                }
            ]
        }   
    },
    "highlight": {
        "fields": {
            "name": {
              "term_vector": "with_positions_offsets"
            }
        }
    }
}

和映射:

{
    "settings": {
        "analysis": {
            "analyzer": {
                "partialAnalyzer": {
                    "type": "custom",
                    "tokenizer": "ngram_tokenizer",
                    "filter": ["asciifolding", "lowercase"]
                },
                "keywordAnalyzer": {
                    "type": "custom",
                    "tokenizer": "keyword",
                    "filter": ["asciifolding", "lowercase"]
                },
                "searchAnalyzer": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": ["asciifolding", "lowercase"]
                }
            },

            "tokenizer": {
                "ngram_tokenizer": {
                    "type": "edge_ngram",
                    "min_gram": "1",
                    "max_gram": "15",
                    "token_chars": [ "letter", "digit" ]
                }
            }
        }
    },

    "mappings": {
        "place": {
            "properties": {
                "name": {
                    "type": "string",
                    "index_analyzer": "partialAnalyzer",
                    "search_analyzer": "searchAnalyzer",
                    "term_vector": "with_positions_offsets",
                    "fields": {
                        "raw": {
                            "type": "string",
                            "analyzer": "keywordAnalyzer"
                        }
                    }
                }
            }
        }
    }
}

我试图在查询中添加一个没有模糊性的新匹配子句,以尝试匹配关键字 before 匹配模糊但它没有改变任何东西 .

'match': {
   'name': {
   'query': 'sport',
   'operator': 'and'
}

知道怎么处理这个吗?

此致,Raphaël

1 回答

  • 2

    我猜你可以用_1075021做到这一点

    在突出显示的查询中尝试此操作 .

    "highlight": {
        "fields": {
          "name": {
            "term_vector": "with_positions_offsets",
            "highlight_query": {
              "match": {
                "name.raw": {
                    "query": "spotr",
                    "fuzziness": 2
                }
              }
            }
          }
        }
      }
    

    我希望它有所帮助 .

相关问题