Search Wiki:

What is LINQ to Lucene?

Providing a custom LINQ solution for the Lucene Information Retrieval System, commonly referred to as a search-engine.


Repository Fixed
The repository now contains the latest source with dependencies. Patches are welcome!

Current Release
The Re-Release
As promised, this release merges the features of previous releases into the one bundle.


Older Release
The Type-Conversion Release
Monday, 19 November 2007
TYPES BEYOND STRINGS NOW SUPPORTED
As promised (albeit out of order), support has been added for type-conversion. If the type of the indexed-property uses a type-converter that supports conversion from a string, the type will automatically convert to its appropriate type. This automatically inlcudes string, bool, int, datetime and a number of other .net types that already implement their own type-converters. Custom types can implement their own type-converters. For more information on type-converters please review either of the following article: MSDN: How to Implement a Type-Converter

Older Release
The Query Release
Tuesday, 13 November 2007
This release provides a real focus on the querying abilities of the LINQ to Lucene project and is the first real 'working release', converting LINQ statements to Lucene queries with deferred query execution and object creation or projection. It culminates the majority of the required querying features for LINQ that Lucene provides natively.

Lucene SyntaxLINQ to Lucene
Terms & Phrases"test" or "hello dolly"c.Match("test") or c.Match("hello dolly")
Fieldstitle:"The Right way" and text:goc.Title == "The Right way" or c.Text == "go"
WildCardamb?rc.ContactName.Match("amb?r")
Prefixamber*c.ContactName.StartsWith("amber")
Fuzzyroam~ or roam~0.8c.ContactName.Like("roam") or c.ContactName.Like("roam", 0.8)
Proximity"jakarta apache"~10c.ContactName.Like("jakarta apache", 10)
Inclusive Rangemod_date:[20020101 TO 20030101]c.ModifiedDate.Includes("20020101", "20030101")
Exclusive Rangetitle:{Aida TO Carmen}c.Title.Between("Aida", "Carmen")
Boostingjakarta^4 apachec.Title.Match("jakarta".Boost(4), apache)
Boolean Or"jakarta apache" OR jakartawhere c.Match("jakarta apache") || c.Match("jakarta")
Boolean And"jakarta apache" AND "Apache Lucene"where c.Match("jakarta apache") && c.Match("Apache Lucene")
Boolean Not"jakarta apache" NOT "Apache Lucene"where c.Match("jakarta apache") && !c.Match("Apache Lucene")
Required+jakarta lucenec.Title.Match("jakarta".Require(), "lucene")
Grouping(jakarta OR apache) AND websitewhere (c.Title == "jakarta" || c.Title == "apache") && (c.Title == "website")
Native Syntaxie. title:{+return +"pink panther")c.Search("title:(return +\"pink panther\"")

Future Release
  1. Unit Tests and Xml Comments
  2. Aggregation
  3. Filters
  4. Performance Optimizations
  5. Query Analyzers beyond StandardAnalayzer
  6. OrderBy operation
  7. Nested Queries & Joins
  8. Updating the Index
  9. Change Tracking

First Releases
A first release for generating a simple index out of a database for mapping types to Lucene using LINQ is now available.
This is the first small piece of the puzzle.

The Index Release
[Document]
public class Customer 
{
  [Field(Store=FieldStore.Yes, Index=FieldIndex.No)] public string CustomerID { get; set; }
  [Field(Store=FieldStore.Yes, Index=FieldIndex.Tokenized)] public string CustomerName { get; set; }
}
 
IndexContext index = new IndexContext;
index.WriteIndex<Customer>();

Last edited May 26 at 2:10 PM  by CVertex, version 86
Updating...