как отключить es подсветку синонима? - PullRequest
3 голосов
/ 06 марта 2020

Я только хочу выделить слова, которые я ищу в запросе, не включая синоним, но я также надеюсь, что они могут вернуть результат поиска, может содержать результат поиска синонимов, вот пример.

PUT /my_test_index/
{
    "settings": {
        "analysis": {
            "filter": {
                "native_synonym": {
                    "type": "synonym",
                    "ignore_case": true,
                    "expand": true,
                    "synonyms": [
                        "apple,fruit"
                    ]
                }
            },
            "analyzer": {
                "test_analyzer": {
                    "tokenizer": "whitespace",
                    "filter": [
                        "native_synonym"
                    ]
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "desc": {
                "type": "text",
                "analyzer": "test_analyzer"
            }
        }
    }
}
POST /my_test_index/_doc
{
    "desc": "apple"
}

POST /my_test_index/_doc
{
    "desc": "fruit"
}
GET /my_test_index/_search
{
    "query": {
        "match": {
            "desc": "apple"
        }
    },
    "highlight": {
        "fields": {
            "desc": {}
        }
    }
}

Тем не менее, они выделяют fruit и apple, в то время как я хочу получить только apple подсветку. Кто-нибудь знает, как это решить? Заранее спасибо:)

"hits": [
            {
                "_index": "my_test_index",
                "_type": "_doc",
                "_id": "RMyZrXAB7JsJEwsbVF33",
                "_score": 0.29171452,
                "_source": {
                    "desc": "apple"
                },
                "highlight": {
                    "desc": [
                        "<em>apple</em>"
                    ]
                }
            },
            {
                "_index": "my_test_index",
                "_type": "_doc",
                "_id": "RcyarXAB7JsJEwsboF2V",
                "_score": 0.29171452,
                "_source": {
                    "desc": "fruit"
                },
                "highlight": {
                    "desc": [
                        "<em>fruit</em>"
                    ]
                }
            }
        ]

1 Ответ

1 голос
/ 06 марта 2020

Вы можете добавить запрос выделения, который ведет себя иначе, чем ваш фактический поисковый запрос. Все, что вам нужно, это поле, индексированное без синонимов, и вы сможете получить то, что хотите:

PUT /my_test_index/
{
  "settings": {
    "analysis": {
      "filter": {
        "native_synonym": {
          "type": "synonym",
          "ignore_case": true,
          "expand": true,
          "synonyms": [
            "apple,fruit"
          ]
        }
      },
      "analyzer": {
        "test_analyzer": {
          "tokenizer": "whitespace",
          "filter": [
            "native_synonym"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "desc": {
        "type": "text",
        "analyzer": "test_analyzer",
        "fields": {
          "raw": {
            "type": "text",
            "analyzer": "whitespace"
          }
        }
      }
    }
  }
}

GET /my_test_index/_search
{
  "query": {
    "match": {
      "desc": "apple"
    }
  },
  "highlight": {
    "fields": {
      "desc.raw": {
        "highlight_query": {
          "match": {
            "desc.raw": "apple"
          }
        }
      }
    }
  }
}
...