Я новичок в Lucene.Net, в некоторых поисков, которые я имел, я обнаружил, что я могу использовать Lucene в моем проекте,Lucene.net не найти спички правильно
теперь я не могу исправить ошибки в моем код.
Позвольте мне, что я объясняю в кодексе
Прежде всего я создавать индексы, как эти
var strIndexDir = path;
Directory indexDir = FSDirectory.Open(new DirectoryInfo(strIndexDir));
Analyzer std = new StandardAnalyzer(global::Lucene.Net.Util.Version.LUCENE_30)
foreach (var res in resturant)
{
var doc = new Document();
restaurantName = new Field("Name",
res.Name, Field.Store.YES,
Field.Index.ANALYZED, Field.TermVector.YES);
var restaurantId = new Field("Id",
res.RestaurantId.ToString(), Field.Store.YES,
Field.Index.NO, Field.TermVector.NO);
var restaurantSlug = new Field("Slug",
res.Slug, Field.Store.YES,
Field.Index.NO, Field.TermVector.NO);
var restaurantAddress = new Field("Address",
res.Address ?? "empty", Field.Store.YES,
Field.Index.NOT_ANALYZED, Field.TermVector.YES);
var resturantType = new Field("Type",
"restaurant", Field.Store.YES,
Field.Index.NO, Field.TermVector.NO);
doc.Add(restaurantName);
doc.Add(restaurantId);
doc.Add(restaurantSlug);
doc.Add(restaurantAddress);
doc.Add(resturantType);
idxw.AddDocument(doc);
}
idxw.Optimize();
idxw.Close();
Я думаю, что с моей самости индексации в порядке, потому что я хочу просто найти ресторан имя и адреса
также для поискового запроса я использовать этот способ
string strIndexDir = path;
Analyzer std = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
var indexReader = IndexReader.Open(FSDirectory.Open(path), readOnly: true);
var parserName =
new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Name", std);
var parserAddress =
new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Address", std);
var parserSlug =
new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Slug", std);
var parserTitle =
new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Title", std);
var searcher = new IndexSearcher(FSDirectory.Open(path));
using (var srchr = new IndexSearcher(IndexReader.Open(directory,true)))
{
var qryName = parserName.Parse(q);
var qryAddress = parserAddress.Parse(q);
var qrySlug = parserSlug.Parse(q);
var qrytitle = parserTitle.Parse(q);
var cllctr = TopScoreDocCollector.Create(10, true);
searcher.Search(qryName, cllctr);
searcher.Search(qryAddress, cllctr);
searcher.Search(qrySlug, cllctr);
searcher.Search(qrytitle, cllctr);
var hits = cllctr.TopDocs().ScoreDocs;
Теперь позвольте мне сказать, где проблема.
, например я искать это ключевое слово (Q = «коробка») хочу, чтобы найти название ресторана, что имя boxshaharkgharb и хочу использовать «окно»
проблемы заключается в том, что горячий всегда 0, но когда я типа boxshaharkgharb например (q = "boxshaharkgharb"), результат в порядке.
как можно Генделя, что
Большое спасибо @Giedrius, Может у меня объяснить больше? – salar
Мне нужно посеять в коде, чтобы понять – salar
Прошло некоторое время с тех пор, как я использовал Lucene, но если я правильно помню, что просто писать запрос как 'box *' должен получить желаемый результат. Если вы не хотите заставить пользователей писать *, вы можете добавить его сами, как в этом ответе: http://stackoverflow.com/a/5747425/212121 – Giedrius