Определили edgeNGram, поиск работает только по полным словам, а не по токенам - PullRequest
0 голосов
/ 14 сентября 2018

Я использую es 6.4 в качестве сервиса AWS.Вот мое отображение -

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "my_tokenizer"
        }
      }
    },
    "tokenizer": {
      "my_tokenizer": {
        "type": "edge_ngram",
        "min_gram": 3,
        "max_gram": 20,
        "token_chars": [
          "letter"
        ]
      }
    }
  },
  "mappings": {
    "tsetse": {
      "properties": {
        "id": {
          "type": "integer"
        },
        "user_id": {
          "type": "integer"
        },
        "description": {
          "type": "text",
          "analyzer": "my_analyzer"
        },
        "type": {
          "type": "integer"
        }
      }
    }
  }
}

В индексе есть запись с описанием = "наибольшая производительность на земле".Когда я пытаюсь выполнить поиск, он всегда работает с полным словом - земля или представление.Не возвращает результаты на отлично или перф.Чего мне не хватает?

Вот обновленное отображение с EdgeNGram `

{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "tsetse": {
      "properties": {
        "id": {
          "type": "integer"
        },
        "user_id": {
          "type": "integer"
        },
        "description": {
          "type": "text",
          "analyzer": "my_analyzer"
        },
        "type": {
          "type": "integer"
        }
      }
    }
  }
}

`

Сценарий Gist - https://gist.github.com/swati-patil/0b1cea74fc52b1b96d44ad239ad2580d Спасибо,

1 Ответ

0 голосов
/ 15 сентября 2018

Спасибо за суть.Я вижу, что вы неправильно создаете свой индекс:

  1. вы используете POST вместо PUT
  2. вы указываете тип, для которого не следует
  3. есть две закрывающие фигурные скобки, которые нужно удалить в конце

Вместо этого сделайте это следующим образом:

# first delete your index
curl -XDELETE 'my-instance-us-east1.amazonaws.com/my_index'

# then create it correctly
curl -XPUT "my-instance-us-east1.amazonaws.com/my_index" -H 'Content-Type: application/json' -d '{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "my_type": {
      "properties": {
        "text": {
          "type": "text",
          "analyzer": "my_analyzer"
        }
      }
    }
  }
}'

# then analyze works
curl -XPOST my-instance-us-east1.amazonaws.com/my_index/_analyze -H 'Content-Type: application/json' -d '{
  "analyzer": "my_analyzer",
  "text": "Greatest performance on earth"
}'

Затем проиндексируйте документы и выполните свои запросы, ониоба будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...