SOLR indeksleme için alan türünü belirlemek nasıl?

1 Cevap java

I have two table fields in a MySQL table. One is VARCHAR and is a "headline" for a classified (classifieds website). The other is TEXT field which contains the "text" for the classified.

Two Questions:
How should I determine how to index these two fields? (what field-type, what classes to use etc)

Currently I have an "ad_id" as a unique identifier for each ad, example "bmw_m3_82398292".
How can I make SOLR return this identifier whenever a 'query match' is found by SOLR? (The first part of the identifier is actually the headline fields content, the second part is a random number chosen)

Teşekkürler

1 Cevap

1. Schema

Sizin Solr şema çok amaçlanan arama davranışları ile belirlenir. Lütfen schema.xml dosyasında, "metin" ve "string" gibi seçenekler bir demet göreceksiniz. Onlar farklı davranır.

<fieldtype name="string" class="solr.StrField" sortMissingLast="true"     omitNorms="true"/>

Dize alan türü bir dize maç. Bir SQL ifadesinde == gibi çalışacaktır.

<fieldtype name="text_ws"   class="solr.TextField"          positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  </analyzer>
</fieldtype>

Text_ws alan türü sembolleştirmeyi yapar. Ancak, text alanda büyük bir fark stop-kelime ve sınırlayıcı ve alt kasa için filtreler olduğunu. Bu filtreler Lucene endeksi ve Solr iki sorgu için belirlenmiş nasıl dikkat edin. Bir metin alanı ararken Yani, bir eşleşme bulmak yardımcı olmak için bu filtreleri kullanarak sorgu terimleri adapte olacaktır.

<fieldtype name="text"      class="solr.TextField"  positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter ..... />
    <filter ..... />
    <filter ..... />
  </analyzer>
</fieldtype>

Haber gibi şeyler dizine eklerken, örneğin, muhtemelen farklı şirket adları ve başlıkları aramak istiyorum.

<field name="headline" type="text" />
<field name="coname" type="string" indexed="true" multiValued="false" omitNorms="true" />

Yukarıdaki örnek &coname:Intel&headline:processor+specifications gibi bir arama yapmak ve tam olarak Intel hikayeler isabet sonuç almak için izin verecek.

Eğer aralığını aramak istedim

2. Result Fields

Sen RequestHandler getiri alanları standart bir dizi tanımlanmış olabilir

<requestHandler name="mumble" class="solr.DisMaxRequestHandler" >
    <str name="fl">
        category,coname,headline
    </str>
</requestHandler>

Ayrıca fl parametresini kullanarak, sorgu dizesinde istenen alanları tanımlayabilir.:

/select?indent=on&version=2.2&q=coname%3AIn*&start=0&rows=10&fl=coname%2Cid&qt=standard

Ayrıca select ranges sorgu açısından field:[x TO *] sözdizimi kullanarak yapabilirsiniz. Onların tarihe göre belirli reklamları seçmek istedim, bir sorgu oluşturmak olabilir

ad_date:[20100101 TO 20100201]

sorgu açısından. (Aralıkları aramak için birçok yolu vardır, ben yerine Date sınıfının tamsayıları kullanan bir yöntem sunuyorum.)