0

ElasticSearch와 NEST를 처음 접하는 새 태어남을 용서하십시오. .NET 솔루션에서 ElasticSearch를 평가하기위한 프로토 타입을 작성 중입니다. 프로토 타입이 컴파일되고 검색하는 것처럼 보이지만 제대로 결과를 반환하지 않습니다. 소문자 만 몇 개의 키워드로 결과를 반환하고 다른 것은 무시하고 아무 것도 반환하지 않습니다. 내 질문에 잘못된 것이 있다고 생각합니다. 다음은 쿼리 부분입니다 (연결 정보 및 기본 인덱스가 지정되고 작성되었다고 가정).NEST 쿼리 문제가있는 ElasticSearch

// string searchString to be searched against ProductName and Description fields.    
var searchResults = client.Search<Product>(s=>s 
      .From(0) 
      .Size(100) 
      .Query(q=>q.Term(p=>p.ProductName, searchString) || 
       q.Term(p=>p.Description, searchString) 
      )); 

여기에 필요한 경우 모델의 :

[ElasticType(IdProperty = "ProductID")] 
public class Product 
{ 
    [ScaffoldColumn(false)] 
    [JsonIgnore] 
    public int ProductID { get; set; } 

    [Required, StringLength(100), Display(Name = "Name")] 
    public string ProductName { get; set; } 

    [Required, StringLength(10000), Display(Name = "Product Description"), DataType(DataType.MultilineText)] 
    public string Description { get; set; } 

    public string ImagePath { get; set; } 

    [Display(Name = "Price")] 
    public double? UnitPrice { get; set; } 

    public int? CategoryID { get; set; } 
    [JsonIgnore] 
    public virtual Category Category { get; set; } 
} 

이 도움을 주셔서 감사합니다!

+1

검색 문자열과 일치하는 제품 이름 및 설명을 사용 하시겠습니까? –

+0

둘 중 하나와 일치 시키길 원합니다. 예, 약간의 변경으로 OR 연산자도 사용했습니다. – Michael

+0

업데이트 : 좋아, 분명히 내가 전에 OR 연산자를 했어. 글자의 대소 문자를 엉망으로 만드는 것 외에는 검색이 더 잘되고 있습니다. "Custom"은 아무것도 반환하지 않지만 "Custom"은 "Kat Custom Car"를 반환합니다 ... – Michael

답변

2

귀하의 문제는 귀하가 term queries을 사용하고 있으며 분석되지 않았기 때문에 대소 문자를 구분합니다.

대신 (분석)를 match query 사용해보십시오 : 당신은 두 개의 서로 다른 분야에서 동일한 텍스트를 조회하고 있기 때문에

var searchResults = client.Search<Product>(s => s 
    .From(0) 
    .Size(100) 
    .Query(q => 
     q.Match(m => m.OnField(p => p.ProductName).Query(searchString)) || 
     q.Match(m => m.OnField(p => p.Description).Query(searchString)) 
    ) 
); 

한 단계 further-을 촬영, 당신은 multi match query를 사용할 수있는 대신에 두 가지를 결합 용어 쿼리 : 분석의 더 나은 이해를 위해

var searchResults = client.Search<Product>(s => s 
    .From(0) 
    .Size(100) 
    .Query(q => q 
     .MultiMatch(m => m 
      .OnFields(p => p.Product, p => p.Description) 
      .Query(searchText) 
     ) 
    ) 
); 

The Definitive Guide에서 mapping and analysis 섹션은 좋은 읽기입니다.

+0

당신은 그것을 꽤 못 박았습니다! 그게 내 문제를 해결해 줬어. "포함"과 유사한 쿼리를 수행하는 방법을 알고 있습니까? (예 : '캣'캣츠 ...) – Michael

관련 문제