โปรเจ็กต์นี้เชื่อมช่องว่างระหว่างความยืดหยุ่นของการสืบค้น OData และความสามารถในการค้นหาอันทรงพลังของ Elasticsearch ซึ่งช่วยให้คุณใช้ประโยชน์จากไวยากรณ์การสืบค้น OData เพื่อสืบค้นดัชนี Elasticsearch ของคุณ ไม่ว่าคุณจะจัดการกับอ็อบเจ็กต์ที่ซ้อนกันที่ซับซ้อน อาร์เรย์ หรือเพียงแค่ต้องการค้นหาแบบง่ายๆ ส่วนขยายนี้ก็ช่วยคุณได้
หากต้องการเริ่มใช้ส่วนขยายนี้ ให้รวมไว้ในโปรเจ็กต์ของคุณและกำหนดค่าให้ชี้ไปที่อินสแตนซ์ Elasticsearch ของคุณ นี่เป็นตัวอย่างสั้นๆ:
PM> Install-Package Nest.OData
TargetFramework: net8.0
Dependencies:
Microsoft.AspNetCore.OData (>= 8.2.5)
NEST (>= 7.17.5)
[ HttpGet ]
public async Task < IActionResult > Get ( ODataQueryOptions < Document > queryOptions )
{
var searchDescriptor = queryOptions . ToElasticQuery < Document > ( ) ;
var response = await _elasticClient . SearchAsync < Document > ( searchDescriptor ) ;
if ( response . IsValid )
{
return Ok ( response . Documents ) ;
}
else
{
return BadRequest ( ) ;
}
}
แทนที่ Document
ด้วยคลาสเอกสารของคุณที่แมปกับดัชนี Elasticsearch ของคุณ
ส่วนขยายนี้รองรับฟังก์ชันการสืบค้น OData ที่หลากหลาย ซึ่งปรับแต่งเป็นพิเศษสำหรับการสืบค้น DSL ของ Elasticsearch นี่คือสิ่งที่คุณสามารถทำได้:
$filter
): แปลตัวกรอง OData เป็น DSL การสืบค้น Elasticsearch ซึ่งรองรับตัวดำเนินการเชิงตรรกะ การดำเนินการเปรียบเทียบ และฟังก์ชันพื้นฐานบางอย่าง$orderby
): รองรับการจัดเรียงตามหลายฟิลด์ รวมถึงรองรับอ็อบเจ็กต์ที่ซ้อนกัน$skip
และ $top
): ใช้การแบ่งหน้าผ่านพารามิเตอร์ from
และ size
ของ Elasticsearch$apply
): รองรับการแปลการแปลงการรวมกลุ่ม รวมถึงฟังก์ชัน groupby
และการรวม เช่น sum
, max
, min
, average
และ countdistinct
$select
): ความสามารถในการระบุฟิลด์ที่จะรวมไว้ในการตอบกลับ ลดขนาดเพย์โหลด และมุ่งเน้นไปที่ข้อมูลที่เกี่ยวข้อง$expand
): รองรับการใช้เงื่อนไข $filter
และ $select
เพิ่มเติมกับอ็อบเจ็กต์ที่ซ้อนกันที่ซับซ้อน Equals
(อีคิว)Not Equals
(ne)Greater Than
(gt)Greater Than or Equal
(ge)Less Than
(lt)Less Than or Equal
(เลอ)And
Or
In
startswith
endswith
contains
substringof
any
all
การแจงนับจะถือเป็นสตริง ทำให้สามารถเปรียบเทียบได้อย่างตรงไปตรงมาโดยไม่ต้องมีขั้นตอนการแปลงเพิ่มเติม คอลเลกชัน รวมถึงอาร์เรย์แบบธรรมดาและอ็อบเจ็กต์ที่ซ้อนกันสามารถสอบถามได้โดยใช้ฟังก์ชันใดๆ และทั้งหมด มอบประสบการณ์ที่ราบรื่นในการทำงานกับโครงสร้างข้อมูลที่ซับซ้อน
ส่วนขยายให้การสนับสนุนการสืบค้นแบบซ้อน ช่วยให้คุณสามารถเจาะลึกวัตถุและอาร์เรย์ที่ซ้อนกันภายในเอกสารของคุณเพื่อทำการค้นหาแบบละเอียด ไม่ว่าคุณกำลังกรองคุณสมบัติของอ็อบเจ็กต์ที่ซ้อนกันหรือกำลังค้นหาอาร์เรย์การสืบค้นสำหรับองค์ประกอบเฉพาะ ส่วนขยายนี้จะแปลการสืบค้น OData ของคุณให้เป็นการสืบค้น Elasticsearch DSL ที่มีประสิทธิภาพ
$filter=Tags/any(t: t/Name eq 'bug')
{
"query" : {
"nested" : {
"path" : " Tags " ,
"query" : {
"term" : {
"Name" : {
"value" : " bug "
}
}
}
}
}
}
$filter=Category in ('Electronics', 'Books')
{
"query" : {
"terms" : {
"Category" : [ " Electronics " , " Books " ]
}
}
}
$filter=Id eq 42 and ((Color eq 'Red') or (Color eq 'Green') or (Color eq 'Blue'))
{
"query" : {
"bool" : {
"must" : [
{
"term" : {
"Id" : {
"value" : 42
}
}
},
{
"bool" : {
"minimum_should_match" : 1 ,
"should" : [
{
"term" : {
"Color" : {
"value" : " Red "
}
}
},
{
"term" : {
"Color" : {
"value" : " Green "
}
}
},
{
"term" : {
"Color" : {
"value" : " Blue "
}
}
}
]
}
}
]
}
}
}
ยินดีบริจาค! ไม่ว่าคุณจะแก้ไขข้อบกพร่อง เพิ่มคุณสมบัติใหม่ หรือปรับปรุงเอกสาร โปรดอย่าลังเลที่จะส่งคำขอ
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT
หากคุณพบปัญหาหรือมีคำถาม โปรดแจ้งปัญหาในพื้นที่เก็บข้อมูลนี้