строка запросаasticsearch (полнотекстовый поиск), которую нельзя найти - PullRequest
0 голосов
/ 20 декабря 2018

у нас есть документ ниже.Я не могу искать с помощью финансовых рынков.но его можно искать с помощью industry_icon_financialmarkets.png.Может кто-нибудь сказать мне, в чем причина?

содержание является текстовым полем типа.

document:

{
    "title":"test",
    "content":"industry_icon_financialmarkets.png"
}

Запрос:

{
  "from": 0,  
  "size": 2,
  "query": {  
    "bool": {  
      "must": [  
        {  
          "query_string": {  
            "query": "\"industry_icon_financialmarkets.png\""
          }  
        }  
      ]  
    }  
  }
}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

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

Отображение

PUT relevance
{"mapping":{"ID":{"type":"long"},"title": 
{"type":"keyword","analyzer":"my_analyzer"},
"content": 
 {"type":"string","analyzer":"my_analyzer","search_analyzer":"my_analyzer"}},
"settings":
 {"analysis":
  {"analyzer":
   {"my_analyzer": 
   {"tokenizer":"my_tokenizer"}},
    "tokenizer":
     {"my_tokenizer": 
      {"type":"ngram","min_gram":3,"max_gram":30,"token_chars": 
      ["letter","digit"]
      }
     }
   },"number_of_shards":5,"number_of_replicas":2
  }
 } 

Затем начните вставлять документы,

POST relevance/_doc/1
{
 "name": "1elastic",
  "content": "working fine" //replace special characters with space using program before inserting into ES index.
}

Запрос

  GET relevance/_search
  {"size":20,"query":{"bool":{"must":[{"match":{"content": 
  {"query":"fine","fuzziness":1}}}]}}}
0 голосов
/ 20 декабря 2018

Анализатором по умолчанию для текстового поля является standard, который не будет разбивать industry_icon_financialmarkets на токены с использованием _ в качестве разделителя.Я бы предложил вам использовать simple анализатор, который разбивает текст на термины всякий раз, когда встречается символ, который не является буквой.

Вы также можете добавить подполе типа keyword, чтобы сохранить оригиналзначение.

Таким образом, отображение поля должно быть:

{
   "content": {
      "type": "text",
      "analyzer": "simple",
      "fields": {
         "keyword": {
            "type": "keyword"
         }
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...