지금까지이 문제에 대해 몇 시간을 보냈지 만 지금까지는 아무런 운이 없었습니다. 커뮤니티에 도움을 청하십시오.Sitecore 7 필터에 숫자 POCO 속성이있는 ContentSearch API/조건이 작동하지 않습니다.
ProPrice
이라는 필드가있는 Product
이라는 데이터 템플릿이 있는데이 템플릿을 기반으로 한 일부 콘텐츠는 <indexAllFields>true</indexAllFields>
구성을 사용하여 모든 필드의 색인을 생성 할 수 있도록 설정했습니다. 색인을 다시 작성하면 Lucene에 저장된 용어와 함께 색인 필드 (proprice
)가 올바르게 표시됩니다 (누가를 사용하여 검증 됨).
이제 Sitecore 7 ContentSearch API를 사용하여 Lucene 색인에서 콘텐츠를 가져옵니다. 그리고이를 위해, 나는 POCO 엔티티가 SearchResultItem
에서 상속하는 Product
라고 만든, 또한 아래와 같이 가격에 속성을 추가 한 :
[IndexField("proprice")]
public double Price { get; set; }
var products = context.GetQueryable<Product>().Where(p => p.Price == 4.0).ToList();
Sitecore 검색 로그를 보면 Lucene이 번역 된 쿼리는 -proprice:[4 TO 4]
입니다. 그리고이 쿼리를 Luke의 인덱스에 대해 직접 실행하면 데이터가 반환됩니다. 나는 p.Price >= 1.0
과 같은 다른 조건으로 이것을 시도했지만 아무 것도 효과가 없었다. 흥미로운 점은 - 조건을 제거하고 모든 레코드를 가져올 때 Product 엔터티의 Price 속성에 올바른 Double 값 (4.0)이 채워진다는 것입니다. 다음과 같이 내가 약간 쿼리를 변경하는 경우
는하지만, 그것은 올바른 데이터를 반환
var products = context.GetQueryable<Product>().Where(p => p["proprice"] == "4").ToList();
는 그래서 조건이 숫자 값에있을 때, 그것은 작동하지 않는 것 같습니다. 불행히도 숫자 범위를 기준으로 필터링해야하므로 위의 방법으로는 효과적이지 않습니다. ContentSearch API를 피하고 Lucene 공급자를 사용하여 Lucene 쿼리를 직접 실행할 수는 있지만 나중에 다른 검색 공급자 (예 : Solr)로 전환 할 수 없습니다. 또는 다른 방법으로 모든 데이터를 가져 와서 코드에 필터를 적용 할 수 있습니다.
이 문제를 해결하는 데 도움을 주셔서 감사합니다. PS : 몇몇 다른 점 : 1) 나는 한 줄의 텍스트, 정수로 데이터 템플릿에 "ProPrice"의 필드 형식을 시도했다가 두 번 - 아무도 2) 기본 루씬 분석기를 사용하고 일하지 - Lucene.Net.Analysis.Standard.StandardAnalyzer
감사 리처드! 위의 아메드의 제안과 함께 작업했습니다. – Jinto
'Sitecore.ContentSearch.LuceneProvider.dll'을 추가하십시오 – Dann