2017-02-08 1 views
0

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

«Вал»

и он должен искать результат со значением строки

"ценностной терке чем 100"

, но если я использую запрос

var searchDescriptor = new SearchDescriptor<ElasticsearchProject>() 
searchDescriptor.Query(q => 
        q.Wildcard(m => m.OnField(p => p.PNumber).Value(string.Format("*{0}*", searchString))) 

       ); 

он будет работать только для одного слова строки, как

"ValueIsGraterThan100"

, если я использую что-то вроде этого

var searchDescriptor = new SearchDescriptor<ElasticsearchProject>() 
searchDescriptor.Query(q => 

        q.QueryString(m => m.OnFields(p => p.PName).Query(searchString)) 

       ); 

Это будет K для всего слова, как я должен предоставить строку поиска в

"значение"

сделать поиск

"значение является терка чем 100"

только предоставление val не будет работать. Так как я могу выполнить свое требование?

+0

укажите свое отображение и поле имя , где вы искали против – Mysterion

+0

yo может принять это как, есть табличное имя 'allow', и я ищу против поданного имени' PermitDescription'. Так что описание разрешений здесь. – Viplock

+0

как есть? Мне нужны сопоставления, потому что это важно, как настроен ваш индекс. https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html – Mysterion

ответ

1

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

PUT index_name1323 
{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "autocomplete_analyzer": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": [ 
         "standard", 
         "lowercase", 
         "filter_edgengram" 
        ] 
       } 
      }, 
      "filter": { 
       "filter_edgengram": { 
        "type": "edgeNGram", 
        "min_gram": 2, 
        "max_gram": 15 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "test_type": { 
      "properties": { 
       "props": { 
        "type": "string", 
        "analyzer": "autocomplete_analyzer" 
       } 
      } 
     } 
    } 
} 

Теперь вы можете просто использовать как QUERY_STRING или термин фильтр, чтобы соответствовать как вашим документам Вала

POST index_name1323/_search 
{ 
    "query": { 
     "query_string": { 
      "default_field": "props", 
      "query": "val" 
     } 
    } 
} 

Надеется, что это помогает

+0

Я добавил сопоставление в 'PutMappingDescriptor' с' FieldIndexOption.Analyzed' и создал запрос на фильтрацию wild card. Это сработало для меня. Кстати спасибо за ваш ответ. – Viplock

+0

да подстановочный знак на анализируемом поле также будет работать без использования маркерного маркера edge-n, я просто предпочел этот анализатор для вас, так как подстановочные знаки в запросе - это чистые строковые операции с высоким уровнем ввода-вывода. благодаря – user3775217