Field.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:26k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. using IndexReader = Lucene.Net.Index.IndexReader;
  18. using Hits = Lucene.Net.Search.Hits;
  19. using Similarity = Lucene.Net.Search.Similarity;
  20. using Parameter = Lucene.Net.Util.Parameter;
  21. namespace Lucene.Net.Documents
  22. {
  23. /// <summary>A field is a section of a Document.  Each field has two parts, a name and a
  24. /// value.  Values may be free text, provided as a String or as a Reader, or they
  25. /// may be atomic keywords, which are not further processed.  Such keywords may
  26. /// be used to represent dates, urls, etc.  Fields are optionally stored in the
  27. /// index, so that they may be returned with hits on the document.
  28. /// </summary>
  29. [Serializable]
  30. public sealed class Field
  31. {
  32. private System.String name = "body";
  33. // the one and only data object for all different kind of field values
  34. private System.Object fieldsData = null;
  35. private bool storeTermVector = false;
  36. private bool storeOffsetWithTermVector = false;
  37. private bool storePositionWithTermVector = false;
  38. private bool omitNorms = false;
  39. private bool isStored = false;
  40. private bool isIndexed = true;
  41. private bool isTokenized = true;
  42. private bool isBinary = false;
  43. private bool isCompressed = false;
  44. private float boost = 1.0f;
  45. [Serializable]
  46. public sealed class Store : Parameter
  47. {
  48. internal Store(System.String name) : base(name)
  49. {
  50. }
  51. /// <summary>Store the original field value in the index in a compressed form. This is
  52. /// useful for long documents and for binary valued fields.
  53. /// </summary>
  54. public static readonly Store COMPRESS = new Store("COMPRESS");
  55. /// <summary>Store the original field value in the index. This is useful for short texts
  56. /// like a document's title which should be displayed with the results. The
  57. /// value is stored in its original form, i.e. no analyzer is used before it is
  58. /// stored. 
  59. /// </summary>
  60. public static readonly Store YES = new Store("YES");
  61. /// <summary>Do not store the field value in the index. </summary>
  62. public static readonly Store NO = new Store("NO");
  63. }
  64. [Serializable]
  65. public sealed class Index : Parameter
  66. {
  67. internal Index(System.String name) : base(name)
  68. {
  69. }
  70. /// <summary>Do not index the field value. This field can thus not be searched,
  71. /// but one can still access its contents provided it is 
  72. /// {@link Field.Store stored}. 
  73. /// </summary>
  74. public static readonly Index NO = new Index("NO");
  75. /// <summary>Index the field's value so it can be searched. An Analyzer will be used
  76. /// to tokenize and possibly further normalize the text before its
  77. /// terms will be stored in the index. This is useful for common text.
  78. /// </summary>
  79. public static readonly Index TOKENIZED = new Index("TOKENIZED");
  80. /// <summary>Index the field's value without using an Analyzer, so it can be searched.
  81. /// As no analyzer is used the value will be stored as a single term. This is
  82. /// useful for unique Ids like product numbers.
  83. /// </summary>
  84. public static readonly Index UN_TOKENIZED = new Index("UN_TOKENIZED");
  85. /// <summary>Index the field's value without an Analyzer, and disable
  86. /// the storing of norms.  No norms means that index-time boosting
  87. /// and field length normalization will be disabled.  The benefit is
  88. /// less memory usage as norms take up one byte per indexed field
  89. /// for every document in the index.
  90. /// </summary>
  91. public static readonly Index NO_NORMS = new Index("NO_NORMS");
  92. }
  93. [Serializable]
  94. public sealed class TermVector : Parameter
  95. {
  96. internal TermVector(System.String name) : base(name)
  97. {
  98. }
  99. /// <summary>Do not store term vectors. </summary>
  100. public static readonly TermVector NO = new TermVector("NO");
  101. /// <summary>Store the term vectors of each document. A term vector is a list
  102. /// of the document's terms and their number of occurences in that document. 
  103. /// </summary>
  104. public static readonly TermVector YES = new TermVector("YES");
  105. /// <summary> Store the term vector + token position information
  106. /// 
  107. /// </summary>
  108. /// <seealso cref="YES">
  109. /// </seealso>
  110. public static readonly TermVector WITH_POSITIONS = new TermVector("WITH_POSITIONS");
  111. /// <summary> Store the term vector + Token offset information
  112. /// 
  113. /// </summary>
  114. /// <seealso cref="YES">
  115. /// </seealso>
  116. public static readonly TermVector WITH_OFFSETS = new TermVector("WITH_OFFSETS");
  117. /// <summary> Store the term vector + Token position and offset information
  118. /// 
  119. /// </summary>
  120. /// <seealso cref="YES">
  121. /// </seealso>
  122. /// <seealso cref="WITH_POSITIONS">
  123. /// </seealso>
  124. /// <seealso cref="WITH_OFFSETS">
  125. /// </seealso>
  126. public static readonly TermVector WITH_POSITIONS_OFFSETS = new TermVector("WITH_POSITIONS_OFFSETS");
  127. }
  128. /// <summary>Sets the boost factor hits on this field.  This value will be
  129. /// multiplied into the score of all hits on this this field of this
  130. /// document.
  131. /// 
  132. /// <p>The boost is multiplied by {@link Document#GetBoost()} of the document
  133. /// containing this field.  If a document has multiple fields with the same
  134. /// name, all such values are multiplied together.  This product is then
  135. /// multipled by the value {@link Similarity#LengthNorm(String,int)}, and
  136. /// rounded by {@link Similarity#EncodeNorm(float)} before it is stored in the
  137. /// index.  One should attempt to ensure that this product does not overflow
  138. /// the range of that encoding.
  139. /// 
  140. /// </summary>
  141. /// <seealso cref="Document.SetBoost(float)">
  142. /// </seealso>
  143. /// <seealso cref="Similarity.LengthNorm(String, int)">
  144. /// </seealso>
  145. /// <seealso cref="Similarity.EncodeNorm(float)">
  146. /// </seealso>
  147. public void  SetBoost(float boost)
  148. {
  149. this.boost = boost;
  150. }
  151. /// <summary>Returns the boost factor for hits for this field.
  152. /// 
  153. /// <p>The default value is 1.0.
  154. /// 
  155. /// <p>Note: this value is not stored directly with the document in the index.
  156. /// Documents returned from {@link IndexReader#Document(int)} and
  157. /// {@link Hits#Doc(int)} may thus not have the same value present as when
  158. /// this field was indexed.
  159. /// 
  160. /// </summary>
  161. /// <seealso cref="SetBoost(float)">
  162. /// </seealso>
  163. public float GetBoost()
  164. {
  165. return boost;
  166. }
  167. /// <summary>Constructs a String-valued Field that is not tokenized, but is indexed
  168. /// and stored.  Useful for non-text fields, e.g. date or url.  
  169. /// </summary>
  170. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index)
  171. /// Field(name, value, Field.Store.YES, Field.Index.UN_TOKENIZED)} instead 
  172. /// </deprecated>
  173. public static Field Keyword(System.String name, System.String value_Renamed)
  174. {
  175. return new Field(name, value_Renamed, true, true, false);
  176. }
  177. /// <summary>Constructs a String-valued Field that is not tokenized nor indexed,
  178. /// but is stored in the index, for return with hits.
  179. /// </summary>
  180. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index)
  181. /// Field(name, value, Field.Store.YES, Field.Index.NO)} instead 
  182. /// </deprecated>
  183. public static Field UnIndexed(System.String name, System.String value_Renamed)
  184. {
  185. return new Field(name, value_Renamed, true, false, false);
  186. }
  187. /// <summary>Constructs a String-valued Field that is tokenized and indexed,
  188. /// and is stored in the index, for return with hits.  Useful for short text
  189. /// fields, like "title" or "subject". Term vector will not be stored for this field.
  190. /// </summary>
  191. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index)
  192. /// Field(name, value, Field.Store.YES, Field.Index.TOKENIZED)} instead 
  193. /// </deprecated>
  194. public static Field Text(System.String name, System.String value_Renamed)
  195. {
  196. return Text(name, value_Renamed, false);
  197. }
  198. /// <summary>Constructs a Date-valued Field that is not tokenized and is indexed,
  199. /// and stored in the index, for return with hits.
  200. /// </summary>
  201. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index)
  202. /// Field(name, value, Field.Store.YES, Field.Index.UN_TOKENIZED)} instead 
  203. /// </deprecated>
  204. public static Field Keyword(System.String name, System.DateTime value_Renamed)
  205. {
  206. return new Field(name, DateField.DateToString(value_Renamed), true, true, false);
  207. }
  208. /// <summary>Constructs a String-valued Field that is tokenized and indexed,
  209. /// and is stored in the index, for return with hits.  Useful for short text
  210. /// fields, like "title" or "subject".
  211. /// </summary>
  212. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index, Field.TermVector)
  213. /// Field(name, value, Field.Store.YES, Field.Index.TOKENIZED, storeTermVector)} instead 
  214. /// </deprecated>
  215. public static Field Text(System.String name, System.String value_Renamed, bool storeTermVector)
  216. {
  217. return new Field(name, value_Renamed, true, true, true, storeTermVector);
  218. }
  219. /// <summary>Constructs a String-valued Field that is tokenized and indexed,
  220. /// but that is not stored in the index.  Term vector will not be stored for this field.
  221. /// </summary>
  222. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index)
  223. /// Field(name, value, Field.Store.NO, Field.Index.TOKENIZED)} instead 
  224. /// </deprecated>
  225. public static Field UnStored(System.String name, System.String value_Renamed)
  226. {
  227. return UnStored(name, value_Renamed, false);
  228. }
  229. /// <summary>Constructs a String-valued Field that is tokenized and indexed,
  230. /// but that is not stored in the index.
  231. /// </summary>
  232. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index, Field.TermVector)
  233. /// Field(name, value, Field.Store.NO, Field.Index.TOKENIZED, storeTermVector)} instead 
  234. /// </deprecated>
  235. public static Field UnStored(System.String name, System.String value_Renamed, bool storeTermVector)
  236. {
  237. return new Field(name, value_Renamed, false, true, true, storeTermVector);
  238. }
  239. /// <summary>Constructs a Reader-valued Field that is tokenized and indexed, but is
  240. /// not stored in the index verbatim.  Useful for longer text fields, like
  241. /// "body". Term vector will not be stored for this field.
  242. /// </summary>
  243. /// <deprecated> use {@link #Field(String, Reader) Field(name, value)} instead 
  244. /// </deprecated>
  245. public static Field Text(System.String name, System.IO.TextReader value_Renamed)
  246. {
  247. return Text(name, value_Renamed, false);
  248. }
  249. /// <summary>Constructs a Reader-valued Field that is tokenized and indexed, but is
  250. /// not stored in the index verbatim.  Useful for longer text fields, like
  251. /// "body".
  252. /// </summary>
  253. /// <deprecated> use {@link #Field(String, Reader, Field.TermVector)
  254. /// Field(name, value, storeTermVector)} instead 
  255. /// </deprecated>
  256. public static Field Text(System.String name, System.IO.TextReader value_Renamed, bool storeTermVector)
  257. {
  258. Field f = new Field(name, value_Renamed);
  259. f.storeTermVector = storeTermVector;
  260. return f;
  261. }
  262. /// <summary>Returns the name of the field as an interned string.
  263. /// For example "date", "title", "body", ...
  264. /// </summary>
  265. public System.String Name()
  266. {
  267. return name;
  268. }
  269. /// <summary>The value of the field as a String, or null.  If null, the Reader value
  270. /// or binary value is used.  Exactly one of stringValue(), readerValue(), and
  271. /// binaryValue() must be set. 
  272. /// </summary>
  273. public System.String StringValue()
  274. {
  275. return fieldsData is System.String ? (System.String) fieldsData : null;
  276. }
  277. /// <summary>The value of the field as a Reader, or null.  If null, the String value
  278. /// or binary value is  used.  Exactly one of stringValue(), readerValue(),
  279. /// and binaryValue() must be set. 
  280. /// </summary>
  281. public System.IO.TextReader ReaderValue()
  282. {
  283. return fieldsData is System.IO.TextReader ? (System.IO.TextReader) fieldsData : null;
  284. }
  285. /// <summary>The value of the field in Binary, or null.  If null, the Reader or
  286. /// String value is used.  Exactly one of stringValue(), readerValue() and
  287. /// binaryValue() must be set. 
  288. /// </summary>
  289. public byte[] BinaryValue()
  290. {
  291. return fieldsData is byte[] ? (byte[]) fieldsData : null;
  292. }
  293. /// <summary> Create a field by specifying its name, value and how it will
  294. /// be saved in the index. Term vectors will not be stored in the index.
  295. /// 
  296. /// </summary>
  297. /// <param name="name">The name of the field
  298. /// </param>
  299. /// <param name="value">The string to process
  300. /// </param>
  301. /// <param name="store">Whether <code>value</code> should be stored in the index
  302. /// </param>
  303. /// <param name="index">Whether the field should be indexed, and if so, if it should
  304. /// be tokenized before indexing 
  305. /// </param>
  306. /// <throws>  NullPointerException if name or value is <code>null</code> </throws>
  307. /// <throws>  IllegalArgumentException if the field is neither stored nor indexed  </throws>
  308. public Field(System.String name, System.String value_Renamed, Store store, Index index) : this(name, value_Renamed, store, index, TermVector.NO)
  309. {
  310. }
  311. /// <summary> Create a field by specifying its name, value and how it will
  312. /// be saved in the index.
  313. /// 
  314. /// </summary>
  315. /// <param name="name">The name of the field
  316. /// </param>
  317. /// <param name="value">The string to process
  318. /// </param>
  319. /// <param name="store">Whether <code>value</code> should be stored in the index
  320. /// </param>
  321. /// <param name="index">Whether the field should be indexed, and if so, if it should
  322. /// be tokenized before indexing 
  323. /// </param>
  324. /// <param name="termVector">Whether term vector should be stored
  325. /// </param>
  326. /// <throws>  NullPointerException if name or value is <code>null</code> </throws>
  327. /// <throws>  IllegalArgumentException in any of the following situations: </throws>
  328. /// <summary> <ul> 
  329. /// <li>the field is neither stored nor indexed</li> 
  330. /// <li>the field is not indexed but termVector is <code>TermVector.YES</code></li>
  331. /// </ul> 
  332. /// </summary>
  333. public Field(System.String name, System.String value_Renamed, Store store, Index index, TermVector termVector)
  334. {
  335. if (name == null)
  336. throw new System.NullReferenceException("name cannot be null");
  337. if (value_Renamed == null)
  338. throw new System.NullReferenceException("value cannot be null");
  339. if (index == Index.NO && store == Store.NO)
  340. throw new System.ArgumentException("it doesn't make sense to have a field that " + "is neither indexed nor stored");
  341. if (index == Index.NO && termVector != TermVector.NO)
  342. throw new System.ArgumentException("cannot store term vector information " + "for a field that is not indexed");
  343. this.name = String.Intern(name); // field names are interned
  344. this.fieldsData = value_Renamed;
  345. if (store == Store.YES)
  346. {
  347. this.isStored = true;
  348. this.isCompressed = false;
  349. }
  350. else if (store == Store.COMPRESS)
  351. {
  352. this.isStored = true;
  353. this.isCompressed = true;
  354. }
  355. else if (store == Store.NO)
  356. {
  357. this.isStored = false;
  358. this.isCompressed = false;
  359. }
  360. else
  361. {
  362. throw new System.ArgumentException("unknown store parameter " + store);
  363. }
  364. if (index == Index.NO)
  365. {
  366. this.isIndexed = false;
  367. this.isTokenized = false;
  368. }
  369. else if (index == Index.TOKENIZED)
  370. {
  371. this.isIndexed = true;
  372. this.isTokenized = true;
  373. }
  374. else if (index == Index.UN_TOKENIZED)
  375. {
  376. this.isIndexed = true;
  377. this.isTokenized = false;
  378. }
  379. else if (index == Index.NO_NORMS)
  380. {
  381. this.isIndexed = true;
  382. this.isTokenized = false;
  383. this.omitNorms = true;
  384. }
  385. else
  386. {
  387. throw new System.ArgumentException("unknown index parameter " + index);
  388. }
  389. this.isBinary = false;
  390. SetStoreTermVector(termVector);
  391. }
  392. /// <summary> Create a tokenized and indexed field that is not stored. Term vectors will
  393. /// not be stored.
  394. /// 
  395. /// </summary>
  396. /// <param name="name">The name of the field
  397. /// </param>
  398. /// <param name="reader">The reader with the content
  399. /// </param>
  400. /// <throws>  NullPointerException if name or reader is <code>null</code> </throws>
  401. public Field(System.String name, System.IO.TextReader reader) : this(name, reader, TermVector.NO)
  402. {
  403. }
  404. /// <summary> Create a tokenized and indexed field that is not stored, optionally with 
  405. /// storing term vectors.
  406. /// 
  407. /// </summary>
  408. /// <param name="name">The name of the field
  409. /// </param>
  410. /// <param name="reader">The reader with the content
  411. /// </param>
  412. /// <param name="termVector">Whether term vector should be stored
  413. /// </param>
  414. /// <throws>  NullPointerException if name or reader is <code>null</code> </throws>
  415. public Field(System.String name, System.IO.TextReader reader, TermVector termVector)
  416. {
  417. if (name == null)
  418. throw new System.NullReferenceException("name cannot be null");
  419. if (reader == null)
  420. throw new System.NullReferenceException("reader cannot be null");
  421. this.name = String.Intern(name); // field names are interned
  422. this.fieldsData = reader;
  423. this.isStored = false;
  424. this.isCompressed = false;
  425. this.isIndexed = true;
  426. this.isTokenized = true;
  427. this.isBinary = false;
  428. SetStoreTermVector(termVector);
  429. }
  430. /// <summary>Create a field by specifying all parameters except for <code>storeTermVector</code>,
  431. /// which is set to <code>false</code>.
  432. /// 
  433. /// </summary>
  434. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index)} instead
  435. /// </deprecated>
  436. public Field(System.String name, System.String string_Renamed, bool store, bool index, bool token) : this(name, string_Renamed, store, index, token, false)
  437. {
  438. }
  439. /// <summary> Create a stored field with binary value. Optionally the value may be compressed.
  440. /// 
  441. /// </summary>
  442. /// <param name="name">The name of the field
  443. /// </param>
  444. /// <param name="value">The binary value
  445. /// </param>
  446. /// <param name="store">How <code>value</code> should be stored (compressed or not.)
  447. /// </param>
  448. public Field(System.String name, byte[] value_Renamed, Store store)
  449. {
  450. if (name == null)
  451. throw new System.ArgumentException("name cannot be null");
  452. if (value_Renamed == null)
  453. throw new System.ArgumentException("value cannot be null");
  454. this.name = String.Intern(name);
  455. this.fieldsData = value_Renamed;
  456. if (store == Store.YES)
  457. {
  458. this.isStored = true;
  459. this.isCompressed = false;
  460. }
  461. else if (store == Store.COMPRESS)
  462. {
  463. this.isStored = true;
  464. this.isCompressed = true;
  465. }
  466. else if (store == Store.NO)
  467. throw new System.ArgumentException("binary values can't be unstored");
  468. else
  469. {
  470. throw new System.ArgumentException("unknown store parameter " + store);
  471. }
  472. this.isIndexed = false;
  473. this.isTokenized = false;
  474. this.isBinary = true;
  475. SetStoreTermVector(TermVector.NO);
  476. }
  477. /// <summary> </summary>
  478. /// <param name="name">The name of the field
  479. /// </param>
  480. /// <param name="string">The string to process
  481. /// </param>
  482. /// <param name="store">true if the field should store the string
  483. /// </param>
  484. /// <param name="index">true if the field should be indexed
  485. /// </param>
  486. /// <param name="token">true if the field should be tokenized
  487. /// </param>
  488. /// <param name="storeTermVector">true if we should store the Term Vector info
  489. /// 
  490. /// </param>
  491. /// <deprecated> use {@link #Field(String, String, Field.Store, Field.Index, Field.TermVector)} instead
  492. /// </deprecated>
  493. public Field(System.String name, System.String string_Renamed, bool store, bool index, bool token, bool storeTermVector)
  494. {
  495. if (name == null)
  496. throw new System.NullReferenceException("name cannot be null");
  497. if (string_Renamed == null)
  498. throw new System.NullReferenceException("value cannot be null");
  499. if (!index && storeTermVector)
  500. throw new System.ArgumentException("cannot store a term vector for fields that are not indexed");
  501. this.name = String.Intern(name); // field names are interned
  502. this.fieldsData = string_Renamed;
  503. this.isStored = store;
  504. this.isIndexed = index;
  505. this.isTokenized = token;
  506. this.storeTermVector = storeTermVector;
  507. }
  508. private void  SetStoreTermVector(TermVector termVector)
  509. {
  510. if (termVector == TermVector.NO)
  511. {
  512. this.storeTermVector = false;
  513. this.storePositionWithTermVector = false;
  514. this.storeOffsetWithTermVector = false;
  515. }
  516. else if (termVector == TermVector.YES)
  517. {
  518. this.storeTermVector = true;
  519. this.storePositionWithTermVector = false;
  520. this.storeOffsetWithTermVector = false;
  521. }
  522. else if (termVector == TermVector.WITH_POSITIONS)
  523. {
  524. this.storeTermVector = true;
  525. this.storePositionWithTermVector = true;
  526. this.storeOffsetWithTermVector = false;
  527. }
  528. else if (termVector == TermVector.WITH_OFFSETS)
  529. {
  530. this.storeTermVector = true;
  531. this.storePositionWithTermVector = false;
  532. this.storeOffsetWithTermVector = true;
  533. }
  534. else if (termVector == TermVector.WITH_POSITIONS_OFFSETS)
  535. {
  536. this.storeTermVector = true;
  537. this.storePositionWithTermVector = true;
  538. this.storeOffsetWithTermVector = true;
  539. }
  540. else
  541. {
  542. throw new System.ArgumentException("unknown termVector parameter " + termVector);
  543. }
  544. }
  545. /// <summary>True iff the value of the field is to be stored in the index for return
  546. /// with search hits.  It is an error for this to be true if a field is
  547. /// Reader-valued. 
  548. /// </summary>
  549. public bool IsStored()
  550. {
  551. return isStored;
  552. }
  553. /// <summary>True iff the value of the field is to be indexed, so that it may be
  554. /// searched on. 
  555. /// </summary>
  556. public bool IsIndexed()
  557. {
  558. return isIndexed;
  559. }
  560. /// <summary>True iff the value of the field should be tokenized as text prior to
  561. /// indexing.  Un-tokenized fields are indexed as a single word and may not be
  562. /// Reader-valued. 
  563. /// </summary>
  564. public bool IsTokenized()
  565. {
  566. return isTokenized;
  567. }
  568. /// <summary>True if the value of the field is stored and compressed within the index </summary>
  569. public bool IsCompressed()
  570. {
  571. return isCompressed;
  572. }
  573. /// <summary>True iff the term or terms used to index this field are stored as a term
  574. /// vector, available from {@link IndexReader#GetTermFreqVector(int,String)}.
  575. /// These methods do not provide access to the original content of the field,
  576. /// only to terms used to index it. If the original content must be
  577. /// preserved, use the <code>stored</code> attribute instead.
  578. /// 
  579. /// </summary>
  580. /// <seealso cref="IndexReader.GetTermFreqVector(int, String)">
  581. /// </seealso>
  582. public bool IsTermVectorStored()
  583. {
  584. return storeTermVector;
  585. }
  586. /// <summary> True iff terms are stored as term vector together with their offsets 
  587. /// (start and end positon in source text).
  588. /// </summary>
  589. public bool IsStoreOffsetWithTermVector()
  590. {
  591. return storeOffsetWithTermVector;
  592. }
  593. /// <summary> True iff terms are stored as term vector together with their token positions.</summary>
  594. public bool IsStorePositionWithTermVector()
  595. {
  596. return storePositionWithTermVector;
  597. }
  598. /// <summary>True iff the value of the filed is stored as binary </summary>
  599. public bool IsBinary()
  600. {
  601. return isBinary;
  602. }
  603. /// <summary>True if norms are omitted for this indexed field </summary>
  604. public bool GetOmitNorms()
  605. {
  606. return omitNorms;
  607. }
  608. /// <summary>Expert:
  609. /// 
  610. /// If set, omit normalization factors associated with this indexed field.
  611. /// This effectively disables indexing boosts and length normalization for this field.
  612. /// </summary>
  613. public void  SetOmitNorms(bool omitNorms)
  614. {
  615. this.omitNorms = omitNorms;
  616. }
  617. /// <summary>Prints a Field for human consumption. </summary>
  618. public override System.String ToString()
  619. {
  620. System.Text.StringBuilder result = new System.Text.StringBuilder();
  621. if (isStored)
  622. {
  623. result.Append("stored");
  624. if (isCompressed)
  625. result.Append("/compressed");
  626. else
  627. result.Append("/uncompressed");
  628. }
  629. if (isIndexed)
  630. {
  631. if (result.Length > 0)
  632. result.Append(",");
  633. result.Append("indexed");
  634. }
  635. if (isTokenized)
  636. {
  637. if (result.Length > 0)
  638. result.Append(",");
  639. result.Append("tokenized");
  640. }
  641. if (storeTermVector)
  642. {
  643. if (result.Length > 0)
  644. result.Append(",");
  645. result.Append("termVector");
  646. }
  647. if (storeOffsetWithTermVector)
  648. {
  649. if (result.Length > 0)
  650. result.Append(",");
  651. result.Append("termVectorOffsets");
  652. }
  653. if (storePositionWithTermVector)
  654. {
  655. if (result.Length > 0)
  656. result.Append(",");
  657. result.Append("termVectorPosition");
  658. }
  659. if (isBinary)
  660. {
  661. if (result.Length > 0)
  662. result.Append(",");
  663. result.Append("binary");
  664. }
  665. if (omitNorms)
  666. {
  667. result.Append(",omitNorms");
  668. }
  669. result.Append('<');
  670. result.Append(name);
  671. result.Append(':');
  672. if (fieldsData != null)
  673. {
  674. result.Append(fieldsData);
  675. }
  676. result.Append('>');
  677. return result.ToString();
  678. }
  679. }
  680. }